This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)
Confirmatory hypotheses (as specified in preregistration)
NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.
ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.
Hypothesis #1
Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.03 |
0.03 |
495 |
1.12 |
0.263 |
|
| abs |
0.21 |
0.03 |
495 |
6.55 |
<0.001 |
* |
| p7_ctry1 |
-0.32 |
0.06 |
495 |
-5.44 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.06 |
495 |
13.58 |
<0.001 |
* |
| p7_ctry3 |
-0.11 |
0.06 |
495 |
-1.78 |
0.075 |
|
| p7_ctry4 |
-0.95 |
0.06 |
495 |
-15.26 |
<0.001 |
* |
| scale1 |
0.00 |
0.02 |
495 |
-0.17 |
0.863 |
|
| abs:p7_ctry1 |
0.04 |
0.05 |
495 |
0.72 |
0.474 |
|
| abs:p7_ctry2 |
-0.01 |
0.07 |
495 |
-0.18 |
0.86 |
|
| abs:p7_ctry3 |
0.12 |
0.07 |
495 |
1.79 |
0.073 |
|
| abs:p7_ctry4 |
-0.04 |
0.07 |
495 |
-0.60 |
0.551 |
|
| abs:scale1 |
-0.03 |
0.02 |
495 |
-1.52 |
0.129 |
|
| p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.86 |
0.064 |
|
| p7_ctry2:scale1 |
0.04 |
0.03 |
495 |
1.14 |
0.255 |
|
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.99 |
0.047 |
* |
| p7_ctry4:scale1 |
-0.18 |
0.04 |
495 |
-4.90 |
<0.001 |
* |
| abs:p7_ctry1:scale1 |
-0.03 |
0.03 |
495 |
-0.88 |
0.381 |
|
| abs:p7_ctry2:scale1 |
-0.03 |
0.04 |
495 |
-0.68 |
0.499 |
|
| abs:p7_ctry3:scale1 |
0.00 |
0.04 |
495 |
-0.01 |
0.992 |
|
| abs:p7_ctry4:scale1 |
0.04 |
0.04 |
495 |
0.87 |
0.387 |
|
We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2
Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.
Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)
If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.07 |
0.04 |
495 |
1.80 |
0.073 |
|
| por |
0.38 |
0.04 |
495 |
10.20 |
<0.001 |
* |
| p7_ctry1 |
-0.19 |
0.06 |
495 |
-3.17 |
0.002 |
* |
| p7_ctry2 |
0.58 |
0.07 |
495 |
8.56 |
<0.001 |
* |
| p7_ctry3 |
-0.17 |
0.06 |
495 |
-2.74 |
0.006 |
* |
| p7_ctry4 |
-0.59 |
0.08 |
495 |
-7.34 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.39 |
0.694 |
|
| por:p7_ctry1 |
0.20 |
0.06 |
495 |
3.25 |
0.001 |
* |
| por:p7_ctry2 |
-0.08 |
0.07 |
495 |
-1.17 |
0.245 |
|
| por:p7_ctry3 |
0.00 |
0.07 |
495 |
0.05 |
0.963 |
|
| por:p7_ctry4 |
0.04 |
0.08 |
495 |
0.54 |
0.59 |
|
| por:scale1 |
0.00 |
0.02 |
495 |
0.14 |
0.89 |
|
| p7_ctry1:scale1 |
-0.08 |
0.04 |
495 |
-2.06 |
0.04 |
* |
| p7_ctry2:scale1 |
0.11 |
0.04 |
495 |
2.48 |
0.014 |
* |
| p7_ctry3:scale1 |
0.07 |
0.04 |
495 |
1.88 |
0.06 |
|
| p7_ctry4:scale1 |
-0.12 |
0.05 |
495 |
-2.40 |
0.017 |
* |
| por:p7_ctry1:scale1 |
-0.03 |
0.04 |
495 |
-0.75 |
0.456 |
|
| por:p7_ctry2:scale1 |
-0.14 |
0.04 |
495 |
-3.29 |
0.001 |
* |
| por:p7_ctry3:scale1 |
-0.01 |
0.05 |
495 |
-0.15 |
0.878 |
|
| por:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.62 |
0.106 |
|
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.06 |
0.03 |
495 |
1.94 |
0.053 |
|
| mm |
0.26 |
0.03 |
495 |
7.60 |
<0.001 |
* |
| p7_ctry1 |
-0.18 |
0.06 |
495 |
-2.95 |
0.003 |
* |
| p7_ctry2 |
0.66 |
0.06 |
495 |
10.31 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.06 |
495 |
-4.58 |
<0.001 |
* |
| p7_ctry4 |
-0.75 |
0.07 |
495 |
-10.67 |
<0.001 |
* |
| scale1 |
0.01 |
0.02 |
495 |
0.39 |
0.693 |
|
| mm:p7_ctry1 |
0.20 |
0.06 |
495 |
3.57 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.07 |
0.06 |
495 |
-1.20 |
0.23 |
|
| mm:p7_ctry3 |
-0.01 |
0.06 |
495 |
-0.14 |
0.888 |
|
| mm:p7_ctry4 |
0.05 |
0.08 |
495 |
0.64 |
0.521 |
|
| mm:scale1 |
-0.04 |
0.02 |
495 |
-2.14 |
0.033 |
* |
| p7_ctry1:scale1 |
-0.11 |
0.04 |
495 |
-3.11 |
0.002 |
* |
| p7_ctry2:scale1 |
0.10 |
0.04 |
495 |
2.66 |
0.008 |
* |
| p7_ctry3:scale1 |
0.07 |
0.03 |
495 |
2.10 |
0.036 |
* |
| p7_ctry4:scale1 |
-0.17 |
0.04 |
495 |
-3.96 |
<0.001 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.03 |
495 |
-1.83 |
0.068 |
|
| mm:p7_ctry2:scale1 |
-0.09 |
0.04 |
495 |
-2.48 |
0.014 |
* |
| mm:p7_ctry3:scale1 |
0.01 |
0.04 |
495 |
0.28 |
0.778 |
|
| mm:p7_ctry4:scale1 |
0.08 |
0.05 |
495 |
1.60 |
0.111 |
|
In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.38 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 6.33 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.79 points on the Spiritual Events scale (range: 0-80).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).


Hypothesis #3
Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.09 |
100 |
0.00 |
1 |
|
| abs |
0.30 |
0.09 |
100 |
3.40 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| abs:scale1 |
-0.06 |
0.04 |
100 |
-1.67 |
0.097 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| abs |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.06 |
98 |
-0.06 |
0.955 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.40 |
0.08 |
109 |
5.31 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| abs:scale1 |
-0.03 |
0.05 |
109 |
-0.61 |
0.546 |
|
| China |
| (Intercept) |
0.00 |
0.09 |
98 |
0.00 |
1 |
|
| abs |
0.26 |
0.09 |
98 |
3.00 |
0.003 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.04 |
98 |
-0.41 |
0.684 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.15 |
0.08 |
90 |
1.74 |
0.085 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
0.01 |
0.06 |
90 |
0.14 |
0.892 |
|
We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)
Hypothesis #4
Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.
Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
100 |
7.30 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| por:scale1 |
-0.02 |
0.04 |
100 |
-0.49 |
0.628 |
|
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| por |
0.29 |
0.08 |
98 |
3.64 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
-0.06 |
0.06 |
98 |
-1.04 |
0.303 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.41 |
0.07 |
109 |
5.52 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.00 |
0.05 |
109 |
0.10 |
0.917 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.54 |
0.07 |
98 |
7.34 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.05 |
0.04 |
98 |
1.14 |
0.257 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.19 |
0.08 |
90 |
2.25 |
0.027 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
0.11 |
0.06 |
90 |
1.83 |
0.07 |
|
Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.08 |
100 |
0.00 |
1 |
|
| mm |
0.49 |
0.08 |
100 |
6.36 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
100 |
0.00 |
1 |
|
| mm:scale1 |
-0.11 |
0.04 |
100 |
-2.93 |
0.004 |
* |
| Ghana |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.20 |
0.08 |
98 |
2.42 |
0.017 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.10 |
0.06 |
98 |
-1.88 |
0.062 |
|
| Thailand |
| (Intercept) |
0.00 |
0.08 |
109 |
0.00 |
1 |
|
| mm |
0.33 |
0.08 |
109 |
4.17 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
109 |
0.00 |
1 |
|
| mm:scale1 |
-0.04 |
0.05 |
109 |
-0.83 |
0.411 |
|
| China |
| (Intercept) |
0.00 |
0.08 |
98 |
0.00 |
1 |
|
| mm |
0.38 |
0.08 |
98 |
4.68 |
<0.001 |
* |
| scale1 |
0.00 |
0.04 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.00 |
0.04 |
98 |
0.04 |
0.968 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.09 |
90 |
0.00 |
1 |
|
| mm |
0.09 |
0.09 |
90 |
1.07 |
0.288 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
0.03 |
0.06 |
90 |
0.48 |
0.632 |
|
Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)
Secondary exploratory analyses
“Secular” experiences
From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”
Parallel to Hypothesis #1
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.01 |
0.03 |
495 |
0.34 |
0.731 |
|
| abs |
0.36 |
0.03 |
495 |
10.70 |
<0.001 |
* |
| p7_ctry1 |
0.14 |
0.06 |
495 |
2.26 |
0.025 |
* |
| p7_ctry2 |
0.24 |
0.06 |
495 |
3.74 |
<0.001 |
* |
| p7_ctry3 |
-0.05 |
0.07 |
495 |
-0.74 |
0.457 |
|
| p7_ctry4 |
-0.23 |
0.07 |
495 |
-3.44 |
<0.001 |
* |
| scale1 |
0.00 |
0.03 |
495 |
0.06 |
0.949 |
|
| abs:p7_ctry1 |
0.10 |
0.06 |
495 |
1.83 |
0.068 |
|
| abs:p7_ctry2 |
-0.05 |
0.07 |
495 |
-0.75 |
0.451 |
|
| abs:p7_ctry3 |
0.06 |
0.07 |
495 |
0.79 |
0.431 |
|
| abs:p7_ctry4 |
0.04 |
0.07 |
495 |
0.50 |
0.617 |
|
| abs:scale1 |
-0.01 |
0.03 |
495 |
-0.36 |
0.722 |
|
| p7_ctry1:scale1 |
-0.25 |
0.05 |
495 |
-4.79 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.09 |
0.05 |
495 |
-1.62 |
0.107 |
|
| p7_ctry3:scale1 |
0.19 |
0.06 |
495 |
3.37 |
<0.001 |
* |
| p7_ctry4:scale1 |
0.08 |
0.06 |
495 |
1.41 |
0.16 |
|
| abs:p7_ctry1:scale1 |
0.00 |
0.05 |
495 |
0.00 |
0.999 |
|
| abs:p7_ctry2:scale1 |
-0.05 |
0.06 |
495 |
-0.85 |
0.398 |
|
| abs:p7_ctry3:scale1 |
0.04 |
0.06 |
495 |
0.71 |
0.481 |
|
| abs:p7_ctry4:scale1 |
0.01 |
0.06 |
495 |
0.11 |
0.914 |
|
In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).
For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).
This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2
Here are our results, using the Porosity scale (Dulin):
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.10 |
0.04 |
495 |
2.36 |
0.019 |
* |
| por |
0.45 |
0.04 |
495 |
10.66 |
<0.001 |
* |
| p7_ctry1 |
0.22 |
0.07 |
495 |
3.21 |
0.001 |
* |
| p7_ctry2 |
0.04 |
0.08 |
495 |
0.53 |
0.596 |
|
| p7_ctry3 |
-0.21 |
0.07 |
495 |
-3.01 |
0.003 |
* |
| p7_ctry4 |
0.38 |
0.09 |
495 |
4.06 |
<0.001 |
* |
| scale1 |
0.10 |
0.04 |
495 |
2.79 |
0.005 |
* |
| por:p7_ctry1 |
0.24 |
0.07 |
495 |
3.38 |
<0.001 |
* |
| por:p7_ctry2 |
-0.28 |
0.07 |
495 |
-3.77 |
<0.001 |
* |
| por:p7_ctry3 |
-0.08 |
0.08 |
495 |
-0.96 |
0.339 |
|
| por:p7_ctry4 |
0.26 |
0.09 |
495 |
2.85 |
0.005 |
* |
| por:scale1 |
0.14 |
0.03 |
495 |
3.98 |
<0.001 |
* |
| p7_ctry1:scale1 |
-0.33 |
0.06 |
495 |
-5.79 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.20 |
0.06 |
495 |
-3.06 |
0.002 |
* |
| p7_ctry3:scale1 |
0.15 |
0.06 |
495 |
2.62 |
0.009 |
* |
| p7_ctry4:scale1 |
0.35 |
0.08 |
495 |
4.59 |
<0.001 |
* |
| por:p7_ctry1:scale1 |
-0.09 |
0.06 |
495 |
-1.53 |
0.127 |
|
| por:p7_ctry2:scale1 |
-0.12 |
0.06 |
495 |
-1.93 |
0.054 |
|
| por:p7_ctry3:scale1 |
0.08 |
0.07 |
495 |
1.16 |
0.248 |
|
| por:p7_ctry4:scale1 |
0.33 |
0.07 |
495 |
4.45 |
<0.001 |
* |
And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| (Intercept) |
0.09 |
0.04 |
495 |
2.53 |
0.012 |
* |
| mm |
0.31 |
0.04 |
495 |
7.92 |
<0.001 |
* |
| p7_ctry1 |
0.27 |
0.07 |
495 |
3.85 |
<0.001 |
* |
| p7_ctry2 |
0.05 |
0.07 |
495 |
0.65 |
0.515 |
|
| p7_ctry3 |
-0.30 |
0.06 |
495 |
-4.64 |
<0.001 |
* |
| p7_ctry4 |
0.10 |
0.08 |
495 |
1.29 |
0.198 |
|
| scale1 |
0.05 |
0.03 |
495 |
1.56 |
0.118 |
|
| mm:p7_ctry1 |
0.29 |
0.06 |
495 |
4.48 |
<0.001 |
* |
| mm:p7_ctry2 |
-0.12 |
0.07 |
495 |
-1.83 |
0.067 |
|
| mm:p7_ctry3 |
-0.08 |
0.07 |
495 |
-1.07 |
0.284 |
|
| mm:p7_ctry4 |
0.22 |
0.10 |
495 |
2.27 |
0.023 |
* |
| mm:scale1 |
0.06 |
0.03 |
495 |
1.85 |
0.065 |
|
| p7_ctry1:scale1 |
-0.30 |
0.06 |
495 |
-5.29 |
<0.001 |
* |
| p7_ctry2:scale1 |
-0.08 |
0.06 |
495 |
-1.39 |
0.165 |
|
| p7_ctry3:scale1 |
0.15 |
0.05 |
495 |
2.80 |
0.005 |
* |
| p7_ctry4:scale1 |
0.19 |
0.07 |
495 |
2.93 |
0.004 |
* |
| mm:p7_ctry1:scale1 |
-0.06 |
0.05 |
495 |
-1.09 |
0.276 |
|
| mm:p7_ctry2:scale1 |
-0.15 |
0.05 |
495 |
-2.69 |
0.007 |
* |
| mm:p7_ctry3:scale1 |
0.05 |
0.06 |
495 |
0.92 |
0.356 |
|
| mm:p7_ctry4:scale1 |
0.24 |
0.08 |
495 |
3.11 |
0.002 |
* |
In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).
For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.47 points on the Porosity scale (range: 0-34), participants (on average) increased by 1.45 points on the Uncommon Events scale (range: 0-18) or 0.91 points on the Extrasensory scale (range: 0-7).
For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).
These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.38; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.


Parallel to Hypothesis #3
Here are our results:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| abs |
0.46 |
0.07 |
100 |
6.50 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| abs:scale1 |
0.00 |
0.05 |
100 |
0.09 |
0.93 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.28 |
0.07 |
98 |
4.02 |
<0.001 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.04 |
0.07 |
98 |
-0.55 |
0.583 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| abs |
0.41 |
0.07 |
109 |
6.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
109 |
0.00 |
1 |
|
| abs:scale1 |
0.02 |
0.06 |
109 |
0.40 |
0.693 |
|
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| abs |
0.36 |
0.07 |
98 |
5.12 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| abs:scale1 |
-0.07 |
0.06 |
98 |
-1.13 |
0.263 |
|
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| abs |
0.27 |
0.08 |
90 |
3.37 |
0.001 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| abs:scale1 |
-0.02 |
0.06 |
90 |
-0.37 |
0.709 |
|
In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)
Parallel to Hypothesis #4
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| por |
0.53 |
0.07 |
100 |
8.03 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| por:scale1 |
0.06 |
0.05 |
100 |
1.07 |
0.286 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por |
0.15 |
0.07 |
98 |
2.10 |
0.038 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.03 |
0.07 |
98 |
0.41 |
0.685 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| por |
0.32 |
0.07 |
109 |
4.37 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| por:scale1 |
0.18 |
0.05 |
109 |
3.37 |
0.001 |
* |
| China |
| (Intercept) |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por |
0.46 |
0.06 |
98 |
7.13 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| por:scale1 |
0.25 |
0.06 |
98 |
4.31 |
<0.001 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| por |
0.23 |
0.08 |
90 |
2.80 |
0.006 |
* |
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| por:scale1 |
-0.05 |
0.06 |
90 |
-0.87 |
0.384 |
|
In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:
| parameter |
b |
standard error |
df |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.07 |
100 |
0.00 |
1 |
|
| mm |
0.52 |
0.07 |
100 |
7.82 |
<0.001 |
* |
| scale1 |
0.00 |
0.05 |
100 |
0.00 |
1 |
|
| mm:scale1 |
0.02 |
0.05 |
100 |
0.35 |
0.726 |
|
| Ghana |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.19 |
0.07 |
98 |
2.66 |
0.009 |
* |
| scale1 |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm:scale1 |
-0.08 |
0.07 |
98 |
-1.18 |
0.242 |
|
| Thailand |
| (Intercept) |
0.00 |
0.07 |
109 |
0.00 |
1 |
|
| mm |
0.24 |
0.07 |
109 |
3.16 |
0.002 |
* |
| scale1 |
0.00 |
0.05 |
109 |
0.00 |
1 |
|
| mm:scale1 |
0.11 |
0.05 |
109 |
2.02 |
0.046 |
* |
| China |
| (Intercept) |
0.00 |
0.07 |
98 |
0.00 |
1 |
|
| mm |
0.33 |
0.07 |
98 |
4.58 |
<0.001 |
* |
| scale1 |
0.00 |
0.06 |
98 |
0.00 |
1 |
|
| mm:scale1 |
0.14 |
0.06 |
98 |
2.30 |
0.024 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.08 |
90 |
0.00 |
1 |
|
| mm |
0.01 |
0.08 |
90 |
0.06 |
0.95 |
|
| scale1 |
0.00 |
0.06 |
90 |
0.00 |
1 |
|
| mm:scale1 |
-0.03 |
0.06 |
90 |
-0.47 |
0.636 |
|
In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)
“Control” scales (Hypothesis #5)
From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”
Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.
NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.95 |
0.051 |
|
| score |
0.17 |
0.02 |
9.61 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.97 |
0.048 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.02 |
0.309 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.12 |
0.906 |
|
| predictorhthk_wob |
0.03 |
0.03 |
0.95 |
0.343 |
|
| p7_ctry1 |
-0.37 |
0.03 |
-12.07 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
25.22 |
<0.001 |
* |
| p7_ctry3 |
-0.11 |
0.04 |
-3.21 |
0.001 |
* |
| p7_ctry4 |
-0.96 |
0.03 |
-28.68 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
5.57 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.76 |
0.006 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.91 |
0.004 |
* |
| score:predictorhthk_wob |
0.02 |
0.03 |
0.72 |
0.473 |
|
| score:p7_ctry1 |
0.10 |
0.03 |
3.64 |
<0.001 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.78 |
0.075 |
|
| score:p7_ctry3 |
0.02 |
0.04 |
0.60 |
0.546 |
|
| score:p7_ctry4 |
0.02 |
0.04 |
0.53 |
0.597 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.12 |
0.034 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.24 |
0.214 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.18 |
0.855 |
|
| predictorhthk_wob:p7_ctry1 |
0.02 |
0.05 |
0.38 |
0.7 |
|
| predictorint_ctl:p7_ctry2 |
-0.01 |
0.01 |
-1.04 |
0.298 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.35 |
0.176 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.71 |
0.478 |
|
| predictorhthk_wob:p7_ctry2 |
0.01 |
0.05 |
0.30 |
0.763 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.22 |
0.826 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.27 |
0.206 |
|
| predictorpor_mm:p7_ctry3 |
0.05 |
0.05 |
0.98 |
0.327 |
|
| predictorhthk_wob:p7_ctry3 |
0.01 |
0.07 |
0.14 |
0.885 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.43 |
0.153 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.45 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.10 |
0.06 |
1.70 |
0.089 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.91 |
0.361 |
|
| score:predictorint_ctl:p7_ctry1 |
0.00 |
0.01 |
0.05 |
0.959 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.00 |
0.046 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.34 |
0.733 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.07 |
0.05 |
-1.46 |
0.145 |
|
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.10 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.75 |
0.081 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.56 |
0.574 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.08 |
0.05 |
-1.64 |
0.101 |
|
| score:predictorint_ctl:p7_ctry3 |
0.01 |
0.02 |
0.56 |
0.574 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.35 |
0.177 |
|
| score:predictorpor_mm:p7_ctry3 |
0.00 |
0.05 |
-0.05 |
0.958 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.04 |
0.06 |
0.59 |
0.558 |
|
| score:predictorint_ctl:p7_ctry4 |
0.03 |
0.02 |
2.13 |
0.033 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.04 |
0.03 |
-1.38 |
0.166 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.06 |
-0.08 |
0.933 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.05 |
0.06 |
0.81 |
0.419 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.05 |
0.02 |
2.55 |
0.011 |
* |
| score |
0.19 |
0.02 |
8.68 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.01 |
-0.03 |
0.978 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.39 |
0.696 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.05 |
0.963 |
|
| predictorhthk_wob |
-0.02 |
0.03 |
-0.57 |
0.57 |
|
| p7_ctry1 |
-0.20 |
0.04 |
-5.62 |
<0.001 |
* |
| p7_ctry2 |
0.67 |
0.04 |
18.12 |
<0.001 |
* |
| p7_ctry3 |
-0.26 |
0.04 |
-6.17 |
<0.001 |
* |
| p7_ctry4 |
-0.64 |
0.04 |
-16.21 |
<0.001 |
* |
| score:predictorint_ctl |
0.06 |
0.01 |
6.62 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-2.02 |
0.043 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
1.03 |
0.301 |
|
| score:predictorhthk_wob |
0.08 |
0.04 |
2.29 |
0.022 |
* |
| score:p7_ctry1 |
0.12 |
0.03 |
3.42 |
<0.001 |
* |
| score:p7_ctry2 |
-0.02 |
0.04 |
-0.60 |
0.548 |
|
| score:p7_ctry3 |
0.07 |
0.04 |
1.72 |
0.085 |
|
| score:p7_ctry4 |
-0.06 |
0.04 |
-1.37 |
0.17 |
|
| predictorint_ctl:p7_ctry1 |
0.03 |
0.02 |
2.04 |
0.041 |
* |
| predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.77 |
0.077 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.43 |
0.664 |
|
| predictorhthk_wob:p7_ctry1 |
0.00 |
0.06 |
-0.06 |
0.952 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.02 |
-2.55 |
0.011 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.51 |
0.012 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.67 |
0.505 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.06 |
-0.47 |
0.641 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.02 |
0.07 |
0.942 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.05 |
0.296 |
|
| predictorpor_mm:p7_ctry3 |
0.04 |
0.06 |
0.79 |
0.428 |
|
| predictorhthk_wob:p7_ctry3 |
-0.02 |
0.08 |
-0.27 |
0.786 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.02 |
1.21 |
0.226 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.27 |
0.023 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.80 |
0.426 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.06 |
-0.20 |
0.841 |
|
| score:predictorint_ctl:p7_ctry1 |
0.03 |
0.01 |
2.44 |
0.015 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.14 |
0.033 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.31 |
0.755 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.78 |
0.434 |
|
| score:predictorint_ctl:p7_ctry2 |
0.03 |
0.02 |
1.76 |
0.078 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.25 |
0.801 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.38 |
0.707 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.00 |
0.06 |
0.06 |
0.954 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.02 |
0.02 |
-1.02 |
0.308 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.18 |
0.237 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.24 |
0.813 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.08 |
0.07 |
-1.09 |
0.276 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.36 |
0.722 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.01 |
0.04 |
-0.38 |
0.706 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.08 |
-0.08 |
0.938 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.02 |
0.07 |
0.25 |
0.805 |
|
In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.


“Control” scales, without reverse coding
The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.
In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.
Collapsing across sites
Here are our results using the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.94 |
0.052 |
|
| score |
0.18 |
0.02 |
10.57 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
2.16 |
0.031 |
* |
| predictorabs_pmm |
-0.01 |
0.01 |
-1.02 |
0.308 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.12 |
0.906 |
|
| predictorhthk_wob |
0.02 |
0.02 |
0.90 |
0.37 |
|
| p7_ctry1 |
-0.35 |
0.03 |
-11.84 |
<0.001 |
* |
| p7_ctry2 |
0.79 |
0.03 |
26.04 |
<0.001 |
* |
| p7_ctry3 |
-0.10 |
0.03 |
-3.19 |
0.001 |
* |
| p7_ctry4 |
-0.96 |
0.03 |
-28.80 |
<0.001 |
* |
| score:predictorint_ctl |
0.04 |
0.01 |
6.03 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.04 |
0.01 |
-2.76 |
0.006 |
* |
| score:predictorpor_mm |
0.08 |
0.03 |
2.92 |
0.004 |
* |
| score:predictorhthk_wob |
0.08 |
0.03 |
3.14 |
0.002 |
* |
| score:p7_ctry1 |
0.07 |
0.03 |
2.57 |
0.01 |
* |
| score:p7_ctry2 |
-0.06 |
0.03 |
-1.95 |
0.052 |
|
| score:p7_ctry3 |
0.04 |
0.03 |
1.33 |
0.183 |
|
| score:p7_ctry4 |
0.01 |
0.04 |
0.36 |
0.721 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.50 |
0.135 |
|
| predictorabs_pmm:p7_ctry1 |
-0.03 |
0.03 |
-1.25 |
0.213 |
|
| predictorpor_mm:p7_ctry1 |
0.01 |
0.05 |
0.18 |
0.855 |
|
| predictorhthk_wob:p7_ctry1 |
-0.01 |
0.05 |
-0.26 |
0.795 |
|
| predictorint_ctl:p7_ctry2 |
-0.02 |
0.01 |
-1.24 |
0.217 |
|
| predictorabs_pmm:p7_ctry2 |
0.04 |
0.03 |
1.36 |
0.175 |
|
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.05 |
-0.71 |
0.477 |
|
| predictorhthk_wob:p7_ctry2 |
-0.03 |
0.05 |
-0.59 |
0.557 |
|
| predictorint_ctl:p7_ctry3 |
-0.01 |
0.01 |
-0.44 |
0.663 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.27 |
0.204 |
|
| predictorpor_mm:p7_ctry3 |
0.05 |
0.05 |
0.98 |
0.325 |
|
| predictorhthk_wob:p7_ctry3 |
0.03 |
0.05 |
0.64 |
0.525 |
|
| predictorint_ctl:p7_ctry4 |
0.02 |
0.01 |
1.19 |
0.236 |
|
| predictorabs_pmm:p7_ctry4 |
-0.10 |
0.03 |
-3.46 |
<0.001 |
* |
| predictorpor_mm:p7_ctry4 |
0.10 |
0.06 |
1.71 |
0.088 |
|
| predictorhthk_wob:p7_ctry4 |
-0.04 |
0.05 |
-0.88 |
0.378 |
|
| score:predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.42 |
0.155 |
|
| score:predictorabs_pmm:p7_ctry1 |
-0.05 |
0.02 |
-2.00 |
0.045 |
* |
| score:predictorpor_mm:p7_ctry1 |
0.02 |
0.05 |
0.34 |
0.732 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.12 |
0.05 |
-2.55 |
0.011 |
* |
| score:predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-3.37 |
<0.001 |
* |
| score:predictorabs_pmm:p7_ctry2 |
0.05 |
0.03 |
1.75 |
0.08 |
|
| score:predictorpor_mm:p7_ctry2 |
-0.03 |
0.05 |
-0.56 |
0.573 |
|
| score:predictorhthk_wob:p7_ctry2 |
-0.05 |
0.04 |
-1.18 |
0.24 |
|
| score:predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.19 |
0.847 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.35 |
0.176 |
|
| score:predictorpor_mm:p7_ctry3 |
0.00 |
0.05 |
-0.05 |
0.957 |
|
| score:predictorhthk_wob:p7_ctry3 |
0.00 |
0.05 |
-0.01 |
0.992 |
|
| score:predictorint_ctl:p7_ctry4 |
0.04 |
0.01 |
2.41 |
0.016 |
* |
| score:predictorabs_pmm:p7_ctry4 |
-0.04 |
0.03 |
-1.39 |
0.165 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.06 |
-0.08 |
0.933 |
|
| score:predictorhthk_wob:p7_ctry4 |
0.03 |
0.06 |
0.51 |
0.609 |
|
And here are our results using the Spiritual Events scale:
| parameter |
b |
standard error |
t |
p |
significant |
| (Intercept) |
0.03 |
0.02 |
1.54 |
0.123 |
|
| score |
0.20 |
0.02 |
10.10 |
<0.001 |
* |
| predictorint_ctl |
0.01 |
0.01 |
1.35 |
0.176 |
|
| predictorabs_pmm |
-0.01 |
0.02 |
-0.39 |
0.693 |
|
| predictorpor_mm |
0.00 |
0.03 |
0.05 |
0.962 |
|
| predictorhthk_wob |
-0.01 |
0.03 |
-0.29 |
0.771 |
|
| p7_ctry1 |
-0.18 |
0.04 |
-5.22 |
<0.001 |
* |
| p7_ctry2 |
0.66 |
0.04 |
18.57 |
<0.001 |
* |
| p7_ctry3 |
-0.25 |
0.04 |
-7.22 |
<0.001 |
* |
| p7_ctry4 |
-0.62 |
0.04 |
-15.94 |
<0.001 |
* |
| score:predictorint_ctl |
0.05 |
0.01 |
6.67 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.03 |
0.02 |
-2.04 |
0.041 |
* |
| score:predictorpor_mm |
0.03 |
0.03 |
1.04 |
0.297 |
|
| score:predictorhthk_wob |
0.13 |
0.03 |
4.46 |
<0.001 |
* |
| score:p7_ctry1 |
0.10 |
0.03 |
3.07 |
0.002 |
* |
| score:p7_ctry2 |
0.00 |
0.03 |
-0.02 |
0.984 |
|
| score:p7_ctry3 |
0.07 |
0.04 |
1.71 |
0.088 |
|
| score:p7_ctry4 |
-0.07 |
0.04 |
-1.61 |
0.108 |
|
| predictorint_ctl:p7_ctry1 |
0.02 |
0.01 |
1.40 |
0.161 |
|
| predictorabs_pmm:p7_ctry1 |
-0.05 |
0.03 |
-1.79 |
0.074 |
|
| predictorpor_mm:p7_ctry1 |
-0.02 |
0.06 |
-0.44 |
0.661 |
|
| predictorhthk_wob:p7_ctry1 |
-0.04 |
0.06 |
-0.73 |
0.467 |
|
| predictorint_ctl:p7_ctry2 |
-0.04 |
0.01 |
-2.45 |
0.014 |
* |
| predictorabs_pmm:p7_ctry2 |
0.08 |
0.03 |
2.54 |
0.011 |
* |
| predictorpor_mm:p7_ctry2 |
-0.04 |
0.06 |
-0.67 |
0.501 |
|
| predictorhthk_wob:p7_ctry2 |
-0.04 |
0.05 |
-0.69 |
0.492 |
|
| predictorint_ctl:p7_ctry3 |
0.00 |
0.01 |
-0.02 |
0.984 |
|
| predictorabs_pmm:p7_ctry3 |
0.03 |
0.03 |
1.06 |
0.291 |
|
| predictorpor_mm:p7_ctry3 |
0.04 |
0.06 |
0.80 |
0.423 |
|
| predictorhthk_wob:p7_ctry3 |
0.05 |
0.06 |
0.85 |
0.396 |
|
| predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.53 |
0.595 |
|
| predictorabs_pmm:p7_ctry4 |
-0.08 |
0.04 |
-2.29 |
0.022 |
* |
| predictorpor_mm:p7_ctry4 |
0.06 |
0.07 |
0.80 |
0.422 |
|
| predictorhthk_wob:p7_ctry4 |
-0.01 |
0.05 |
-0.26 |
0.796 |
|
| score:predictorint_ctl:p7_ctry1 |
0.04 |
0.01 |
3.03 |
0.002 |
* |
| score:predictorabs_pmm:p7_ctry1 |
-0.06 |
0.03 |
-2.15 |
0.031 |
* |
| score:predictorpor_mm:p7_ctry1 |
-0.02 |
0.05 |
-0.32 |
0.753 |
|
| score:predictorhthk_wob:p7_ctry1 |
-0.03 |
0.05 |
-0.62 |
0.534 |
|
| score:predictorint_ctl:p7_ctry2 |
0.02 |
0.01 |
1.17 |
0.241 |
|
| score:predictorabs_pmm:p7_ctry2 |
-0.01 |
0.03 |
-0.25 |
0.8 |
|
| score:predictorpor_mm:p7_ctry2 |
0.02 |
0.06 |
0.38 |
0.704 |
|
| score:predictorhthk_wob:p7_ctry2 |
0.06 |
0.05 |
1.20 |
0.232 |
|
| score:predictorint_ctl:p7_ctry3 |
-0.01 |
0.02 |
-0.94 |
0.348 |
|
| score:predictorabs_pmm:p7_ctry3 |
0.04 |
0.03 |
1.19 |
0.233 |
|
| score:predictorpor_mm:p7_ctry3 |
0.01 |
0.06 |
0.24 |
0.812 |
|
| score:predictorhthk_wob:p7_ctry3 |
-0.11 |
0.06 |
-1.80 |
0.072 |
|
| score:predictorint_ctl:p7_ctry4 |
0.01 |
0.02 |
0.62 |
0.534 |
|
| score:predictorabs_pmm:p7_ctry4 |
-0.01 |
0.04 |
-0.38 |
0.704 |
|
| score:predictorpor_mm:p7_ctry4 |
-0.01 |
0.08 |
-0.08 |
0.937 |
|
| score:predictorhthk_wob:p7_ctry4 |
-0.04 |
0.07 |
-0.64 |
0.523 |
|
Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.
Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone
Here I conduct a set of parallel analyses, considering each site alone.
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
-0.01 |
0.04 |
-0.16 |
0.871 |
|
| score |
0.26 |
0.04 |
6.06 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.20 |
0.842 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.20 |
0.844 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.44 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.91 |
0.057 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
1.04 |
0.298 |
|
| score:predictorhthk_wob |
-0.04 |
0.07 |
-0.53 |
0.598 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.21 |
0.836 |
|
| score |
0.19 |
0.04 |
4.18 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.25 |
0.801 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.02 |
0.984 |
|
| score:predictorint_ctl |
-0.01 |
0.02 |
-0.39 |
0.695 |
|
| score:predictorabs_pmm |
0.01 |
0.04 |
0.28 |
0.779 |
|
| score:predictorpor_mm |
0.07 |
0.07 |
0.97 |
0.331 |
|
| score:predictorhthk_wob |
0.07 |
0.07 |
0.98 |
0.326 |
|
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.27 |
0.04 |
6.53 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.78 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.17 |
0.863 |
|
| score:predictorpor_mm |
0.06 |
0.06 |
0.98 |
0.327 |
|
| score:predictorhthk_wob |
0.10 |
0.06 |
1.51 |
0.132 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.23 |
0.04 |
5.45 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.03 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.08 |
0.04 |
-2.10 |
0.037 |
* |
| score:predictorpor_mm |
0.10 |
0.07 |
1.49 |
0.137 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.12 |
0.034 |
* |
| Vanuatu |
| (Intercept) |
0.00 |
0.05 |
-0.04 |
0.967 |
|
| score |
0.11 |
0.05 |
2.42 |
0.016 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.05 |
0.96 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.14 |
0.893 |
|
| score:predictorint_ctl |
0.04 |
0.02 |
2.10 |
0.036 |
* |
| score:predictorabs_pmm |
-0.02 |
0.04 |
-0.42 |
0.674 |
|
| score:predictorpor_mm |
0.09 |
0.07 |
1.22 |
0.223 |
|
| score:predictorhthk_wob |
0.27 |
0.07 |
3.67 |
<0.001 |
* |
Here are our results for the Daily Spiritual Experiences scale:
| parameter |
b |
standard error |
t |
p |
significant |
| US |
| (Intercept) |
0.00 |
0.04 |
-0.10 |
0.919 |
|
| score |
0.31 |
0.04 |
7.58 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.12 |
0.901 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
-0.01 |
0.07 |
-0.09 |
0.925 |
|
| score:predictorint_ctl |
0.10 |
0.02 |
5.85 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.07 |
0.04 |
-1.98 |
0.048 |
* |
| score:predictorpor_mm |
-0.02 |
0.06 |
-0.33 |
0.742 |
|
| score:predictorhthk_wob |
0.10 |
0.07 |
1.54 |
0.123 |
|
| Ghana |
| (Intercept) |
-0.01 |
0.04 |
-0.23 |
0.821 |
|
| score |
0.17 |
0.04 |
3.92 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.28 |
0.782 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
-0.04 |
0.969 |
|
| score:predictorint_ctl |
0.06 |
0.02 |
3.09 |
0.002 |
* |
| score:predictorabs_pmm |
-0.04 |
0.04 |
-1.03 |
0.304 |
|
| score:predictorpor_mm |
0.02 |
0.07 |
0.31 |
0.756 |
|
| score:predictorhthk_wob |
0.20 |
0.07 |
2.84 |
0.005 |
* |
| Thailand |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.31 |
0.04 |
7.64 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.06 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.06 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.05 |
0.02 |
2.74 |
0.006 |
* |
| score:predictorabs_pmm |
0.01 |
0.04 |
0.37 |
0.708 |
|
| score:predictorpor_mm |
0.02 |
0.06 |
0.34 |
0.738 |
|
| score:predictorhthk_wob |
0.03 |
0.06 |
0.47 |
0.637 |
|
| China |
| (Intercept) |
0.00 |
0.04 |
0.00 |
1 |
|
| score |
0.20 |
0.04 |
4.59 |
<0.001 |
* |
| predictorint_ctl |
0.00 |
0.02 |
0.00 |
1 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.00 |
0.07 |
0.00 |
1 |
|
| score:predictorint_ctl |
0.09 |
0.02 |
5.34 |
<0.001 |
* |
| score:predictorabs_pmm |
-0.05 |
0.04 |
-1.33 |
0.183 |
|
| score:predictorpor_mm |
0.05 |
0.07 |
0.77 |
0.444 |
|
| score:predictorhthk_wob |
0.14 |
0.07 |
2.13 |
0.033 |
* |
| Vanuatu |
| (Intercept) |
-0.01 |
0.05 |
-0.31 |
0.76 |
|
| score |
0.09 |
0.05 |
1.87 |
0.062 |
|
| predictorint_ctl |
0.01 |
0.02 |
0.37 |
0.709 |
|
| predictorabs_pmm |
0.00 |
0.04 |
0.00 |
1 |
|
| predictorpor_mm |
0.00 |
0.07 |
0.00 |
1 |
|
| predictorhthk_wob |
0.01 |
0.07 |
0.19 |
0.851 |
|
| score:predictorint_ctl |
0.00 |
0.02 |
0.22 |
0.824 |
|
| score:predictorabs_pmm |
0.02 |
0.04 |
0.55 |
0.585 |
|
| score:predictorpor_mm |
0.01 |
0.07 |
0.12 |
0.902 |
|
| score:predictorhthk_wob |
0.23 |
0.07 |
3.07 |
0.002 |
* |
In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).



LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNC0xNSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF94bHN4KCIuL2RhdGEgZnJvbSBOaWtraS9QYWNrZXQgN19DT0RFRF9NYXJjaCAxOCwgMjAxOS54bHN4IiwKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSBkX3Jhd1sxLF0gJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInF1ZXN0aW9uIikgJT4lCiAgcmVuYW1lKHF1ZXN0aW9uX3RleHQgPSAiLiIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMOuIiwgIiAtICIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuiIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO5IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxuIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxyIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pLAogICAgICAgICBzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBxdWVzdGlvbiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gaWZlbHNlKHNjYWxlICVpbiUgYygiZW50ciIsICIyZGF5IiwgInZlciIsICJiYXRjIiwgInJlc2FtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5IiwgInN1YmoiLCAiZmlsZSIsICJyZWNyIiwgIndoZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aG9jIiksICJkYXRhX2VudHJ5Iiwgc2NhbGUpKSAlPiUKICBzZWxlY3Qob3JkZXIsIHNjYWxlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgYXJyYW5nZShvcmRlcikKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgZHVwbGljYXRlcwpkdXBsaWNhdGVzIDwtIGRfcmF3ICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCA8LSBmdWxsX2pvaW4oZF9yYXcgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFwN19zdWJqICVpbiUgZHVwbGljYXRlcyRwN19zdWJqKSksCiAgICAgICAgICAgICAgICAgZF9yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X3N1YmogJWluJSBkdXBsaWNhdGVzJHA3X3N1YmogJiBwN19iYXRjID09IDEpKQoKIyBlbGltaW5hdGUgZmlyc3Qgc2FtcGxlIGZyb20gZ2hhbmEgKHBvb3JseSBjb2xsZWN0ZWQpCmQwMCA8LSBkMDAgJT4lCiAgZmlsdGVyKCEocDdfcmVzYW1wbGUgPT0gIjEiICYgcDdfY3RyeSA9PSAiNCIpKQoKZDAwICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7cn0KZDAgPC0gZDAwWy0xLF0gJT4lICMgZ2V0IHJpZCBvZiBxdWVzdGlvbiB0ZXh0CiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInA3X2Fic18iKSwgc3RhcnRzX3dpdGgoInA3X2RzZV8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfc2VfIiksIHN0YXJ0c193aXRoKCJwN193b2JfIiksCiAgICAgICAgICAgICAgICAgc3RhcnRzX3dpdGgoInA3X3VuZXZfIiksIHN0YXJ0c193aXRoKCJwN19leHNlbl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfaHRoa18iKSwgc3RhcnRzX3dpdGgoInA3X3Bvcl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfbW1fIiksIHA3X2RlbV9hZ2UsIHA3X2RlbV9zZXMsCiAgICAgICAgICAgICAgICAgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpLCAKICAgICAgICAgICAgZnVucyhhcy5udW1lcmljKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZGVtX2hvbHkudHVuZy5naWYpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5vIiwgIjEiID0gInllcyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfYWJzX2NoZWNrLCBwN19kc2VfY2hlY2ssIHA3X3NlX2NoZWNrLCBwN191bmV2X2NoZWNrLCAKICAgICAgICAgICAgICAgICBwN19leHNlbl9jaGVjaywgcDdfcG9yX2NoZWNrLCBwN19tbV9jaGVjayksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAicGFzcyIsICIxIiA9ICJmYWlsIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19hYnNfY2hpbGQuZXhwOnA3X2Fic19zdW5zZXQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlKC4sICIwIiA9IEYsICIxIiA9IFQpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZHNlX2dvZC5wcmVzY246cDdfZHNlX2FjY2VwdC53cm9uZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSBpbiBhIHdoaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWUgZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtb3N0IGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIm1hbnkgdGltZXMgYSBkYXkiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3NlX3ZvaWNlLm91dDpwN19zZV9vd24uaGVhbGluZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJzZXZlcmFsIHRpbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gImZhaXJseSBvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2Jfc2V0Lm1pbmRfcmV2ZXJzZTpwN193b2JfZnV0dXJlLm9uLm1lX3JldmVyc2UpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zIiA9ICJzdHJvbmdseSBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV3aGF0IGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2JfbGl0dGxlLmNoYW5nZTpwN193b2JfcHVzaGVkLmFyb3VuZCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAic3Ryb25nbHkgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0yIiA9ICJzb21ld2hhdCBhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMyIgPSAic3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3VuZXZfdm9pY2UuYWxvdWQ6cDdfdW5ldl9zaGFkb3dzKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJuZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJzb21ldGltZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiYWxtb3N0IGFsd2F5cyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZXhzZW5fZXNwLmV4aXN0czpwN19leHNlbl9zZW5kLm1zZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaGFzIG5vdCBoYWQgdGhlIGV4cGVyaWVuY2UgKG5vKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJoYXMgaGFkIHRoZSBleHBlcmllbmNlICh5ZXMpIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19odGhrX2NvbXBsZXg6cDdfaHRoa19yZXNwb25zYmx0LCBwN19odGhrX2xvbmcuaHJzLAogICAgICAgICAgICAgICAgIHA3X2h0aGtfd2F5LnRvLnRvcDpwN19odGhrX25ldy5zb2x0aW9ucywKICAgICAgICAgICAgICAgICBwN19odGhrX3B1enpsZXM6cDdfaHRoa19pbnRlbC50YXNrLCBwN19odGhrX25vdC5wZXJzb25hbCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBub3QgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbGlrZSBtZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfaHRoa19ub3QuZnVuOnA3X2h0aGtfYXZvaWQudGhpbmssIAogICAgICAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bzpwN19odGhrX2xpbC50aG91Z2h0LCBwN19odGhrX25vdC5leGNpdGluZywKICAgICAgICAgICAgICAgICBwN19odGhrX21lbnRhbC5lZmZydDpwN19odGhrX2pvYi5kb25lKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gInNvbWV3aGF0IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBsaWtlIG1lIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19wb3JfdGhncy5ocnQsIHA3X3Bvcl93aWZpLnRoZ3M6cDdfcG9yX2FuZ3IuY250cmwsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3NwcnQuZW52eTpwN19wb3JfcmVhZC50aGdzLCBwN19wb3Jfc3RyZS5zcG9pbCwKICAgICAgICAgICAgICAgICBwN19wb3JfY29uc2x0LnVuc2VlbjpwN19wb3Jfc3Brbi5jdXJzZSwKICAgICAgICAgICAgICAgICBwN19wb3JfY3Vyc2Uuc2ljazpwN19wb3JfZmFsbC5pbi5sb3YsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3RoZ3MuaGVhbDpwN19wb3JfdmlzdWFsaXphdGlvbiksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaXQgZG9lcyBub3QgaGFwcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIml0IG1pZ2h0IGhhcHBlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3Bvcl90aGdzLmh1cnRfYTpwN19wb3JfdGhncy5odXJ0X2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX2FuZ3IuY250cmxfYTpwN19wb3JfYW5nci5jbnRybF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9yZWFkLnRoZ3NfYTpwN19wb3JfcmVhZC50aGdzX2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3N0cmUuc3BvaWxfYTpwN19wb3Jfc3RyZS5zcG9pbF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9zcGtuLmN1cnNlX2E6cDdfcG9yX3Nwa24uY3Vyc2VfYywKICAgICAgICAgICAgICAgICBwN19wb3JfZmFsbC5pbi5sb3ZfYTpwN19wb3JfZmFsbC5pbi5sb3ZfYyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiYSBsb3QiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X21tX2FuZ19mZWVsLmh1cnQ6cDdfbW1fc3BydC50aGdzLmh1cnQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5ldmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGUocDdfY3RyeSA9IHJlY29kZV9mYWN0b3IocDdfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIlZhbnVhdHUiKSwKICAgICAgICAgcDdfc3ViaiA9IGZhY3RvcihwN19zdWJqKSwKICAgICAgICAgcDdfZGVtX3NleCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJmZW1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIm90aGVyIiksCiAgICAgICAgIHA3X2RlbV9ydXIudXJiID0gcmVjb2RlX2ZhY3RvcihwN19kZW1fcnVyLnVyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJydXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAidXJiYW4iKSwKICAgICAgICAgcDdfZGVtX2FmZnJkLmJhc2ljcyA9IHJlY29kZV9mYWN0b3IocDdfZGVtX2FmZnJkLmJhc2ljcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gInllcyIpLAogICAgICAgICBwN19kZW1fc2VzX2NhdCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAibXVjaCBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICJhIGxpdHRsZSBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gImFib3V0IHRoZSBzYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJhIGxpdHRsZSByaWNoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIm11Y2ggcmljaGVyIikpICU+JQogIHNlbGVjdCgtYyhwN19lbnRyOnA3X3Jlc2FtcGxlLCBwN19maWxlOnA3X3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgY291bnQgYW55b25lIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVja3MKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCiMgZF9mYWlsIDwtIGQwICU+JQojICAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAiZmFpbCIgfCBwN19kc2VfY2hlY2sgPT0gImZhaWwiIHwgCiMgICAgICAgICAgICBwN19zZV9jaGVjayA9PSAiZmFpbCIgfCBwN191bmV2X2NoZWNrID09ICJmYWlsIiB8IAojICAgICAgICAgICAgcDdfZXhzZW5fY2hlY2sgPT0gImZhaWwiIHwgcDdfcG9yX2NoZWNrID09ICJmYWlsIiB8CiMgICAgICAgICAgICBwN19tbV9jaGVjayA9PSAiZmFpbCIpCiMgZF9mYWlsICU+JSBjb3VudChwN19jdHJ5KQoKZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiY2hlY2siKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBhdHRlbnRpb25fY2hlY2ssIGNvbnRhaW5zKCJjaGVjayIpKSAlPiUKICBjb3VudChwN19jdHJ5LCBzY2FsZSwgYXR0ZW50aW9uX2NoZWNrKSAlPiUKICBzcHJlYWQoYXR0ZW50aW9uX2NoZWNrLCBuKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKQoKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCmQgPC0gZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayAhPSAiZmFpbCIsIHA3X2RzZV9jaGVjayAhPSAiZmFpbCIsIHA3X3NlX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfdW5ldl9jaGVjayAhPSAiZmFpbCIsIHA3X2V4c2VuX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfcG9yX2NoZWNrICE9ICJmYWlsIiwgcDdfbW1fY2hlY2sgIT0gImZhaWwiKQpgYGAKCmBgYHtyfQojICMgY2hlY2sgY291bnRyeSBjb2RlcwojIGQgJT4lIAojICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiMgICBtdXRhdGUocDdfc3Vial9maXJzdGRpZyA9IHN1YnN0cihwN19zdWJqLCAxLCAxKSkgJT4lCiMgICBjb3VudChwN19jdHJ5LCBwN19zdWJqX2ZpcnN0ZGlnKQpgYGAKCgojIENvbmZpcm1hdG9yeSBoeXBvdGhlc2VzIChhcyBzcGVjaWZpZWQgaW4gcHJlcmVnaXN0cmF0aW9uKQoKX05PVEU6IEkgaW5jbHVkZWQgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzLCBzaW5jZSB3ZSBkaWQgbm90IHNwZWNpZnkgdGhhdCB3ZSB3b3VsZCBleGNsdWRlIHBhcnRpY2lwYW50cyBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCB0cnkgcnVubmluZyBldmVyeXRoaW5nIG9uIHRoZSBzdWJzZXQgb2YgcGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MganVzdCBzbyB0aGF0IHdlIGtub3csIGJ1dCB0aGlzIGRlY3JlYXNlcyBvdXIgc2FtcGxlIHNpemVzIHByZXR0eSBkcmFtYXRpY2FsbHkuXwoKX0FMU08gTk9URTogSSBpbmNsdWRlZCBvbmx5IHRoZSBzZWNvbmQgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cywgd2hvIHdlcmUgcmVjcnVpdGVkIGFjY29yZGluZyB0byBvdXIgc3RhbmRhcmRzIGFuZCBhcyBzcGVjaWZpZWQgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4gRm9yIHRoZSBtb3N0IHBhcnQsIGFsbCByZXN1bHRzIGFyZSB0aGUgc2FtZSB3aGVuIGluY2x1ZGluZyB0aGUgZnVsbCwgImRvdWJsZSIgc2FtcGxlIG9mIEdoYW5haWFuIHBhcnRpY2lwYW50cy5fCgpgYGB7cn0KIyBzdGFuZGFyZGl6ZSwgY29sbGFwc2luZyBhY3Jvc3MgcGFydGljaXBhbnRzCmRfc3RkIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKYGBge3J9CiMgc3RhbmRhcmRpemUsIGNvbGxhcHNpbmcgYWNyb3NzIHBhcnRpY2lwYW50cwpkX3N0ZF9ieXNpdGUgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgY29udGFpbnMoInRvdGFsIikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUgIyBncm91cCBieSBzaXRlCiAgbXV0YXRlKHNjb3JlX3N0ZCA9IHNjYWxlKHNjb3JlLCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1zY29yZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCBzY29yZV9zdGQpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMQoKX19IeXBvdGhlc2lzICMxOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiB0aGUgVGVsbGVnZW4gQWJzb3JwdGlvbiBTY2FsZSAoVGVsbGVnZW4gJiBBdGtpbnNvbiwgMTk3NCkgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgYWJzb3JwdGlvbiBzY29yZXMgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcywgYWxsb3dpbmcgZm9yIGRpZmZlcmVuY2VzIGFjcm9zcyBvdXIgZml2ZSBmaWVsZCBzaXRlcyBhbmQgYWNyb3NzIHRoZSB0d28gc2NhbGVzIHdlIHVzZWQgdG8gbWVhc3VyZSBzcGlyaXR1YWwgZXhwZXJpZW5jZS4gVXNpbmcgdGhlIOKAnGxtZTTigJ0gcGFja2FnZSBmb3IgUiAoQmF0ZXMsIDIwMTgpLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gT3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfaDEgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDEkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gxKQojIHN1bW1hcnkocjEpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDFfc3VtCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMxKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93IGluIHRhYmxlIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3N1bSRzdGRldltoMV9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgxX3Bsb3RfYSA8LSBkX3N0ZF9oMSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9wbG90X2IgPC0gZF9zdGRfaDEgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMTogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfcGxvdF9hLCBoMV9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMgoKX19IeXBvdGhlc2lzICMyOiBQZW9wbGUgd2hvIHNjb3JlIGhpZ2hlciBvbiBvdXIgdHdvIHBvcm9zaXR5IGluZGljZXMgYWxzbyByZXBvcnQgbW9yZSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJXZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUsIGNvbGxhcHNpbmcgYWNyb3NzIGZpZWxkIHNpdGVzLCBhbmQgdGhlbiBjb25kdWN0IGEgbWl4ZWQtZWZmZWN0cyBsaW5lYXIgcmVncmVzc2lvbiwgdXNpbmcgcG9yb3NpdHkgc2NvcmVzIChmcm9tIGVhY2ggb2Ygb3VyIHR3byBpbmRpY2VzKSB0byBwcmVkaWN0IHJlcG9ydHMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGFjcm9zcyB0aGUgMiBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgaW5jbHVkZWQgaW4gb3VyIHN1cnZleSBwYWNrZXQsIGFsbG93aW5nIGZvciBkaWZmZXJlbmNlcyBhY3Jvc3Mgb3VyIGZpdmUgZmllbGQgc2l0ZXMgYW5kIGFjcm9zcyB0aGUgdHdvIHNjYWxlcyB3ZSB1c2VkIHRvIG1lYXN1cmUgc3Bpcml0dWFsIGV4cGVyaWVuY2UuIFVzaW5nIHRoZSDigJxsbWU04oCdIHBhY2thZ2UgZm9yIFIgKEJhdGVzLCAyMDE4KSwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2l0ZSAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KSwgd2hlcmUg4oCcc2NhbGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKGVmZmVjdC1jb2RlZCksIGFuZCDigJxzaXRl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSBmaXZlIGZpZWxkIHNpdGVzIChlZmZlY3QtY29kZWQpLiBXZSB3aWxsIHJ1biB0d28gdmVyc2lvbnMgb2YgdGhpcyBtb2RlbCwgb25lIHVzaW5nIGVhY2ggb2YgdGhlIHR3byDigJxwb3Jvc2l0eeKAnSBtZWFzdXJlcyBkZXNjcmliZWQgYWJvdmUuIEZvciBlYWNoIHJlZ3Jlc3Npb24sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgdCA+IDIsIHAgPCAwLjA1IHVzaW5nIFNhdHRlcnRod2FpdGUncyBkZWdyZWVzIG9mIGZyZWVkb20gbWV0aG9kIGFzIGltcGxlbWVudGVkIGluIHRoZSDigJxsbWVyVGVzdOKAnSBwYWNrYWdlIGZvciBSLCBLdXpuZXRzb3ZhLCBCcm9ja2hvZmYsICYgQ2hyaXN0ZW5zZW4sIDIwMTcpLiAoVGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgaW5jbHVkZWQgaW4gdGhlIG1vZGVsIHdpbGwgYmUgb2YgZ3JlYXQgaW50ZXJlc3QgdG8gdXMsIGJ1dCBhcmUgZXhwbG9yYXRvcnkuKQoKSWYgd2UgaGF2ZSB0cm91YmxlIGZpdHRpbmcgdGhlc2UgbW9kZWxzIG9yIHRoZXJlIGFyZSBvdGhlciBzaWducyBvZiBtb2RlbCBmaXQgcHJvYmxlbXMsIHdlIHdpbGwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBhbHRlcm5hdGl2ZSBtb2RlbDogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHNpdGUvc3ViamVjdCkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIHBvciwgbW0pICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMiRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMiRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjJfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyMl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfc3RkX2gyKQojIHN1bW1hcnkocjJfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgyX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCwKICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc3VtCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMyKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGJvdGggcmVncmVzc2lvbiBhbmFseXNlcyAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gInNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChyYW5nZTogMC04MCkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gIm1tIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAocmFuZ2U6IDAtNTQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAiZHNlIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGUgKHJhbmdlOiAwLTcwKSBvciBgciAoc3VtbWFyeShyMl9tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4KCmBgYHtyfQpoMl9wbG90X2ExIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTEsIGgyX3Bsb3RfYjEsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoMl9wbG90X2EyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMl9wbG90X2IyIDwtIGRfc3RkX2gyICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzMKCl9fSHlwb3RoZXNpcyAjMzogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzFdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwW10gYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSBbLi4uXSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBGb3IgSHlwb3RoZXNpcyAjMywgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNjYWxlICsgKDEgfCBzdWJqZWN0KS4gWy4uLl0gQWdhaW4sIG91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSBhbmQgb2YgZWFjaCBwb3Jvc2l0eSBtZWFzdXJlIG9uIGV4cGVyaWVuY2Ugd2lsbCBiZSBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChiID4gMCwgcCA8IDAuMDUpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oMSA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjNfdXMpCmBgYAoKYGBge3J9CnIzX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHIzX2doKQpgYGAKCmBgYHtyfQpyM190aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyM190aCkKYGBgCgpgYGB7cn0KcjNfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjNfY2gpCmBgYAoKYGBge3J9CnIzX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyM19naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyM192dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICMzIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gdGhlIFVTLCBHaGFuYSwgVGhhaWxhbmQsIGFuZCBDaGluYeKAlGJ1dCB0aGlzIHdhcyBub3QgdGhlIGNhc2UgaW4gVmFudWF0dSAoYWx0aG91Z2ggc29tZSB3b3VsZCBjb25zaWRlciB0aGUgZWZmZWN0ICJtYXJnaW5hbGx5IHNpZ25pZmljYW50Ijsgc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlIGFib3ZlKS4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMSAlPiUKICAgICAgICAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSwgCiAgICAgICBhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsgCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsgCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKyAKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCihTZWUgb3RoZXIgcmVsZXZhbnQgcGxvdHMgdW5kZXIgIkh5cG90aGVzaXMgIzEsIiBhYm92ZS4pCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIeXBvdGhlc2lzICM0CgpfX0h5cG90aGVzaXMgIzQ6IFRoZSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS5fXwoKUHJlcmVnaXN0ZXJlZCBhbmFseXNpczogIkZvciBlYWNoIG9mIG91ciBmaXZlIGZpZWxkIHNpdGVzLCB3ZSB3aWxsIHN0YW5kYXJkaXplIHNjb3JlcyBvbiBlYWNoIG1lYXN1cmUgKGNvbnNpZGVyaW5nIG9ubHkgcGFydGljaXBhbnRzIGZyb20gdGhhdCBmaWVsZCBzaXRlKSwgYW5kIHRoZW4gY29uZHVjdCB0aGUgc2FtZSBhbmFseXNlcyBzcGVjaWZpZWQgYWJvdmUgZm9yIFtIeXBvdGhlc2lzICMyXSB0byBhc3Nlc3MgdGhlIHJlbGF0aW9uc2hpcFsuLi5dIGJldHdlZW4gcG9yb3NpdHkgYW5kIGV4cGVyaWVuY2UgaW4gZWFjaCBmaWVsZCBzaXRlIGluZGl2aWR1YWxseS4gWy4uLl0gRm9yIEh5cG90aGVzaXMgIzQsIG91ciBtb2RlbHMgd2lsbCB0YWtlIHRoZSBmb2xsb3dpbmcgZm9ybTogZXhwZXJpZW5jZSB+IHBvcm9zaXR5ICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNCA8LSBkX3N0ZF9ieXNpdGUgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDQkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI0X3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNF9wb3JfdXMpCmBgYAoKYGBge3J9CnI0X3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNF9wb3JfZ2gpCmBgYAoKYGBge3J9CnI0X3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNF9wb3JfdGgpCmBgYAoKYGBge3J9CnI0X3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNF9wb3JfY2gpCmBgYAoKYGBge3J9CnI0X3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNCAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI0X3Bvcl92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjRfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDQpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgNSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCA5LCAxMikgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAxMywgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAxNywgMjApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDE4LCA0KSksIGJvbGQgPSBUKQpgYGAKClVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgQ2hpbmEsIGFuZCBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZToKCmBgYHtyfQpyNF9tbV91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X21tX3VzKQpgYGAKCmBgYHtyfQpyNF9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2doKQpgYGAKCmBgYHtyfQpyNF9tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X21tX3RoKQpgYGAKCmBgYHtyfQpyNF9tbV9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X21tX2NoKQpgYGAKCmBgYHtyfQpyNF9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI0X21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI0X21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKipXZSBmb3VuZCBldmlkZW5jZSBpbiBmYXZvciBvZiBIeXBvdGhlc2lzICM0IGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1Kio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIE1hcnRoYSBTdG9yeSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDQgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMiwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgU2Vjb25kYXJ5IGV4cGxvcmF0b3J5IGFuYWx5c2VzCgojIyAiU2VjdWxhciIgZXhwZXJpZW5jZXMKCkZyb20gcHJlcmVnaXN0cmF0aW9uOiAiRmlyc3QsIGluIG9yZGVyIHRvIGV4cGxvcmUgdGhlIHF1ZXN0aW9uIG9mIHdoZXRoZXIgYWZmaXJtYXRpb24gb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UsIHBvcm9zaXR5IGFuZCBhYnNvcnB0aW9uIGFyZSBzaW1wbHkgZHVlIHRvIHRoZSByZWxpZ2lvc2l0eSBvZiBwYXJ0aWNpcGFudHMsIHdlIHdpbGwgY29uZHVjdCBhZGRpdGlvbmFsIGFuYWx5c2VzIGZvY3VzaW5nIG9uIHRoZSB0d28g4oCcc2VjdWxhcuKAnSBleHBlcmllbmNlIHNjYWxlcyAodGhlIHJldmlzZWQgTGF1bmF5IFNsYWRlIHNjYWxlLCBNb3JyaXNvbiwgV2VsbHMgYW5kIE5vdGhhcmQgMjAwMF07IGFuZCB0aGUgU2hlZXAtR29hdCBbcGFyYW5vcm1hbF0gc2NhbGUsIFRoYWxib3JuZSAmIERlbGluLCAxOTkzKS4gVGhlc2UgYW5hbHlzZXMgd2lsbCBiZSBpZGVudGljYWwgdG8gdGhlIHByaW1hcnkgYW5hbHlzZXMgb3V0bGluZWQgYWJvdmUsIGV4Y2VwdCB0aGF0IHRoZXkgd2lsbCBvbmx5IGluY2x1ZGUgdGhlc2UgdHdvIOKAnHNlY3VsYXIgZXhwZXJpZW5jZeKAnSBzY2FsZXMgYW5kIG5vdCB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcy4gV2UgY29uc2lkZXIgdGhlc2UgdG8gYmUgZXhwbG9yYXRvcnkgYW5hbHlzZXMuIgoKIyMjIFBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzEKCmBgYHtyfQpkX3N0ZF9oMV9zZWMgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgdW5ldiwgZXhzZW4sIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDFfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMV9zZWMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgIGRfc3RkX2gxX3NlYykKIyBzdW1tYXJ5KHIxX3NlYykKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKYGBge3J9CmgxX3NlY19zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfdW5ldl90b3RhbCwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMV9zZWNfc3VtCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgX3NlY3VsYXJfIGV4cGVyaWVuY2Ugd2FzIGFsc28gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvdyB0YWJsZSBhYm92ZSkuCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gYWJzb3JwdGlvbiwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiYWJzIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEFic29ycHRpb24gc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gImV4c2VuIl0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBFeHRyYXNlbnNvcnkgc2NhbGUgKHJhbmdlOiAwLTcpLgoKVGhpcyB3YXMgYWN0dWFsbHkgYSAobnVtZXJpY2FsbHkpIF9zdHJvbmdlcl8gZWZmZWN0IHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGIgPSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHZzLiBiID0gYHIgc3VtbWFyeShyMSkkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgKS4gV2UgZGlkIG5vdCBwcm92aWRlIGEgcHJlZGljdGlvbiBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIHdvdWxkIGJlIHRoZSBjYXNlIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYSA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMTogQnkgc2l0ZSBhbmQgc2NhbGUiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDFfc2VjX3Bsb3RfYiA8LSBkX3N0ZF9oMV9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDFfc2VjX3Bsb3RfYSwgaDFfc2VjX3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMgoKSGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pOgoKYGBge3J9CmRfc3RkX2gyX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgcG9yLCBtbSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKHVuZXYsIGV4c2VuKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDJfc2VjJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMl9zZWNfcG9yIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDJfc2VjKQojIHN1bW1hcnkocjJfc2VjX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjJfc2VjX3BvcikkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICBkX3N0ZF9oNSAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfcGxvdF9hIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9iIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X3Bsb3RfYSwgaDVfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDVfcGxvdF9jIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9wbG90X2QgPC0gZF9zdGRfaDUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2MsIGg1X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgIkNvbnRyb2wiIHNjYWxlcywgd2l0aG91dCByZXZlcnNlIGNvZGluZwoKVGhlIHR3byBjb250cm9sIHNjYWxlcyBhcmUgdGhlIG9ubHkgc2NhbGVzIHRoYXQgaGF2ZSByZXZlcnNlLWNvZGVkIGl0ZW1zISBUaGlzIGlzIHJlYWxseSB0b28gYmFkLCBiZWNhdXNlIGl0IG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IGFjdHVhbGx5IGdvb2Qgd2F5cyB0byBhc3Nlc3MgYSB5ZXMtYmlhcy4KCkluIGFuIGF0dGVtcHQgdG8gcmVtZWR5IHRoaXMsIGhlcmUgSSByZS1zY29yaW5nIHRoZXNlIHNjYWxlcyBhZnRlciBfZHJvcHBpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtc18uCgojIyMgQ29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKCmBgYHtyfQpkX2N0bF9ub3JldiA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBmdWxsX2pvaW4oCiAgICBkX3N0ZCAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3JldiAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3JldiRwcmVkaWN0b3IpIDwtIGNiaW5kKGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9yX21tID0gYygwLCAwLCAtMSwgMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXYgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI1X25vcmV2X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZTogCgpgYGB7cn0KcjVfbm9yZXZfc2UgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICogcDdfY3RyeSwgCiAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gInNlIikpCiMgc3VtbWFyeShyNV9ub3Jldl9zZSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnN1bW1hcnkocjVfbm9yZXZfc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKQWdhaW4sIGluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJzY29yZSIgYW5kIHRoZSBmaXJzdCBjb250cmFzdCBvbiB0aGUgInByZWRpY3RvciIgcGFyYW1ldGVyIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9hIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIERTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2IgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2EsIGg1X25vcmV2X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYyA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlLCBwcmVkaWN0b3IpLCBjb2xzID0gdmFycyhwN19jdHJ5KSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBCeSBzaXRlIGFuZCBwcmVkaWN0b3IgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2QgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IE92ZXJhbGwgKHVzaW5nIFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGg1X25vcmV2X3Bsb3RfYywgaDVfbm9yZXZfcGxvdF9kLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9jdGxfbm9yZXZfYnlzaXRlIDwtIGQwICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBzdGFydHNfd2l0aCgicDdfaHRoayIpLCBzdGFydHNfd2l0aCgicDdfd29iIiksCiAgICAgICAgIC1jKGVuZHNfd2l0aCgiX2NhdCIpLCBlbmRzX3dpdGgoIl90b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIHNlbGVjdCgtYyhjb250YWlucygicmV2ZXJzZSIpKSkgJT4lICMgZHJvcCBRMSwgUTIsIFEzLCBRNCBmcm9tIHdvYiAKICBzZWxlY3QoLWMocDdfaHRoa19ub3QuZnVuLCBwN19odGhrX2xpbC5jaGFsbGVuZywgcDdfaHRoa19hdm9pZC50aGluaywKICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgIHA3X2h0aGtfbm90LmV4Y2l0aW5nLCBwN19odGhrX21lbnRhbC5lZmZydCwgcDdfaHRoa19qb2IuZG9uZSkpICU+JSAjIGRyb3AgUTMsIFE0LCBRNSwgUTcsIFE4LCBROSwgUTEyLCBRMTYsIFExNyBmcm9tIGh0aGsKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gaWZlbHNlKGdyZXBsKCJodGhrIiwgcXVlc3Rpb24pLCAiaHRoayIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShncmVwbCgid29iIiwgcXVlc3Rpb24pLCAid29iIiwgTkEpKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUpICU+JQogIHN1bW1hcmlzZShzY29yZV9ub3JldiA9IHN1bShyZXNwb25zZSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXV0YXRlKHNjb3JlX25vcmV2X3N0ZCA9IHNjYWxlKHNjb3JlX25vcmV2LCBzY2FsZSA9IFQpKSAlPiUKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlIDwtIGZ1bGxfam9pbigKICBkX3N0ZF9ieXNpdGUgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGRfYnlzaXRlICU+JQogICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pICU+JQogICAgICBnYXRoZXIocHJlZGljdG9yLCBzY29yZSwgYyhhYnMsIHBvciwgbW0pKSwKICAgIGRfY3RsX25vcmV2X2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NhbGUsIHNjb3JlX25vcmV2X3N0ZCkgJT4lCiAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJodGhrX25vcmV2IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIndvYl9ub3JldiIpKSAlPiUKICAgICAgcmVuYW1lKHByZWRpY3RvciA9IHNjYWxlLAogICAgICAgICAgICAgc2NvcmUgPSBzY29yZV9ub3Jldl9zdGQpKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSwKICAgICAgICAgcHJlZGljdG9yID0gZmFjdG9yKHByZWRpY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXZfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRwcmVkaWN0b3IpIDwtIGNiaW5kKAogIGludF9jdGwgPSBjKDIsLTMsIDIsIDIsIC0zKSwKICBhYnNfcG1tID0gYygyLCAwLCAtMSwgLTEsIDApLAogIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogIGh0aGtfd29iID0gYygwLCAxLCAwLCAwLCAtMSkpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X2RzZV91cyA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX3RoKQoKcjVfYnlzaXRlX25vcmV2X2RzZV9jaCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpIZXJlIGFyZSBvdXIgcmVzdWx0cyBmb3IgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZToKCmBgYHtyfQpyNV9ieXNpdGVfbm9yZXZfc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykKCnI1X2J5c2l0ZV9ub3Jldl9zZV9naCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKQoKcjVfYnlzaXRlX25vcmV2X3NlX3RoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpCgpyNV9ieXNpdGVfbm9yZXZfc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV92dCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCAxMCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMjEsIDMwKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDMxLCA0MCkgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDQxLCA1MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNywgNDcsIDEwKSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjNSBpbiBhbG1vc3QgYWxsIHNpdGVzKio6IEluIG1vc3Qgc2l0ZXMsIGFzIHByZWRpY3RlZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSksIHdoZXRoZXIgaW5kZXhlZCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgdXNpbmcgdGhlIERTRSBvciBTRSBzY2FsZXMuIEluIG90aGVyIHdvcmRzLCB0aGUgInByZWRpY3RvcnMgb2YgaW50ZXJlc3QiIChhYnNvcnB0aW9uIGFuZCB0aGUgdHdvIHBvcm9zaXR5IG1lYXN1cmVzKSB3ZXJlIGJldHRlciBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHRoYW4gb3VyIHR3byAiY29udHJvbCIgcHJlZGljdG9ycywgZXZlbiB3aGVuIHdlIG9ubHkgaW5jbHVkZWQgdGhlIG5vbi1yZXZlcnNlLWNvZGVkIGl0ZW1zIGZyb20gdGhlIHR3byAiY29udHJvbCIgcHJlZGljdG9ycy4gVGhlIG9ubHkgZXhjZXB0aW9ucyB0byB0aGlzIHdlcmUgR2hhbmEgd2hlbiB1c2luZyB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChmaXJzdCB0YWJsZSBhYm92ZSksIGFuZCBWYW51YXR1IHdoZW4gdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHNlY29uZCB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNSwgZmlnLmFzcCA9IDAuOCwgaW5jbHVkZSA9IFR9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBFdmVudHMgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIiksCiAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHNjYWxlKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgoYWVzKGZpbGwgPSBwcmVkX3R5cGUsIGNvbG9yID0gcHJlZF90eXBlKSwKICAgICAgICAgICAgICBtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCwgc2hvdy5sZWdlbmQgPSBUKSArCiAgc2NhbGVfY29sb3JfZGlzY3JldGUoKSArCiAgc2NhbGVfZmlsbF9kaXNjcmV0ZSgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIHR5cGUiLCBmaWxsID0gIlByZWRpY3RvciB0eXBlIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIEJleW9uZCB0aGUgcHJlcmVnaXN0cmF0aW9uCgojIyBDb21iaW5lZCBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IG9uIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYWJzb3JwdGlvbiBjb250cm9sbGluZyBmb3IgcG9yb3NpdHkgJiB2aWNlIHZlcnNhKQoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpIZXJlIEkgZXhhbWluZSBhIGJpZyBtb2RlbCwgaW4gd2hpY2ggYm90aCBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSB0b2dldGhlciBwcmVkaWN0IHNwaXJpdHVhbCBleHBlcmllbmNlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbG9vayBhdCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5LCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLCBhbmQgdGhlIHBvc3NpYmlsaXR5IG9mIGFuIGludGVyYWN0aW9uIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkuIEkgbG9vayBhdCBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIGFuZCBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2VwYXJhdGVseSwgYW5kIHVzZSBib3RoIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZSBhbmQgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZXMgdG8gaW5kZXggc3Bpcml0dWFsIGV4cGVyaWVuY2UuCgpgYGB7cn0KZF9zdGRfaDYgPC0gZF9zdGQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfY3RyeSwgc2NhbGUpLCBmdW5zKGZhY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDYkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDYkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU6IAoKYGBge3J9CnI2X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBwN19jdHJ5ICogc2NhbGUgCiAgICAgICAgICAgICAgICsgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9wb3IpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI2X3BvcikkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjozLCA5KSwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6IAoKYGBge3J9CnI2X21tIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogcDdfY3RyeSAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oNikKIyBzdW1tYXJ5KHI2X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyNl9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKGMoMjozLCA5KSwgYm9sZCA9IFQpCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBzZWUgZXZpZGVuY2UgZm9yIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGJlaW5nIHBvc2l0aXZlbHkgcmVsYXRlZCB0byBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgZXZlbiBhZnRlciBjb250cm9sbGluZyBmb3IgZWFjaCBvdGhlcioqOiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBwb3Jvc2l0eTsgYW5kIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgKGFzIGluZGV4ZWQgYnkgZWl0aGVyIHRoZSBEdWxpbiBzY2FsZSBvciB0aGUgTWFydGhhIFN0b3J5IHNjYWxlKSBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIGFsc28gc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSwgY29udHJvbGxpbmcgZm9yIGFic29ycHRpb24uIFRoZXJlIHdhcyBubyBzdHJvbmcgZXZpZGVuY2Ugb2YgYW4gaW50ZXJhY3RpdmUgZWZmZWN0IG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIGVpdGhlciBjYXNlIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4KCmBgYHtyfQpoNl9wbG90X2ExIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiUG9yb3NpdHkgKER1bGluKSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYjEgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBwb3IsIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiUG9yb3NpdHkgKER1bGluKSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQocGxvdF9ncmlkKGg2X3Bsb3RfYTEgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICBoNl9wbG90X2IxICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgcmVsX3dpZHRocyA9IGMoMiwgMSkpLAogICAgICAgICAgZ2V0X2xlZ2VuZChoNl9wbG90X2ExKSwKICAgICAgICAgIG5jb2wgPSAxLCByZWxfaGVpZ2h0cyA9IGMoMSwgMC4xKSkKYGBgCgpgYGB7cn0KaDZfcGxvdF9hMiA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IG1tLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIk1hcnRoYSBTdG9yeSBzY29yZSIsCiAgICAgICBjb2xvciA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSIpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYjIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC44KSArCiAgc2NhbGVfY29sb3JfdmlyaWRpc19jKAogICMgc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiU3BlY3RyYWwiLAogICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcmhlaWdodCA9IDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyd2lkdGggPSAyMCkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2EyICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMiksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfaDZfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIGZ1bGxfam9pbihkX3N0ZF9ieXNpdGUgJT4lCiAgICAgICAgICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfY3RyeSwgc2NhbGUpLCBmdW5zKGZhY3RvcikpCgpjb250cmFzdHMoZF9zdGRfaDZfYnlzaXRlJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g2X2J5c2l0ZSRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpIZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZTogCgpgYGB7cn0KcjZfYnlzaXRlX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdXMpCgpyNl9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9naCkKCnI2X2J5c2l0ZV9wb3JfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3RoKQoKcjZfYnlzaXRlX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfY2gpCgpyNl9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNl9ieXNpdGVfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA4KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDksIDE2KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDE3LCAyNCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAyNSwgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAzMywgNDApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDM0LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCAzNSwgOCkpLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZTogCgpgYGB7cn0KcjZfYnlzaXRlX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdXMpCgpyNl9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9naCkKCnI2X2J5c2l0ZV9tbV90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX3RoKQoKcjZfYnlzaXRlX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fY2gpCgpyNl9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcmJpbmQoc3VtbWFyeShyNl9ieXNpdGVfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgOCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA5LCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAxNywgMjQpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMjUsIDMyKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMzMsIDQwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAzNCwgOCkpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMywgMzUsIDgpKSwgYm9sZCA9IFQpCmBgYAoKSW4gYm90aCBjYXNlcywgKip3ZSBzZWUgc29tZSBldmlkZW5jZSBmb3IgcG9yb3NpdHkgInN3YW1waW5nIG91dCIgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGluIHNvbWUgc2l0ZXMqKiwgaW5jbHVkaW5nIEdoYW5hLCBDaGluYSwgYW5kIFZhbnVhdHUgd2hlbiBwb3Jvc2l0eSBpcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOyBhbmQgdGhlIFVTLCBHaGFuYSwgYW5kIFZhbnVhdHUgd2hlbiBwb3Jvc2l0eSBpcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUgKGluIGZhY3QsIGluIHRoaXMgc2Vjb25kIHNldCBvZiBhbmFseXNlcywgbmVpdGhlciBBYnNvcnB0aW9uIG5vciBNYXJ0aGEgU3RvcnkgZW5kcyB1cCBiZWluZyBhIHNpZ25pZmljYW50IHByZWRpY3RvciBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSBpbiBHaGFuYSBvciBWYW51YXR1KS4KCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgQWJzb3JwdGlvbiBhcyBwcmltYXJpbHkgaW5kaXZpZHVhbCBkaWZmZXJlbmNlLCBwb3Jvc2l0eSBhcyBwcmltYXJpbHkgY3VsdHVyYWwgZGlmZmVyZW5jZT8KCkluIG91ciB0aGVvcml6aW5nLCB3ZSBvZnRlbiBhc3N1bWUgdGhhdCBhYnNvcnB0aW9uIGlzIHByaW1hcmlseSBhbiBpbmRpdmlkdWFsIGRpZmZlcmVuY2UsIHdoaWxlIHBvcm9zaXR5IGlzIHByaW1hcmlseSBhIGN1bHR1cmFsIGRpZmZlcmVuY2XigJRvciBhdCBsZWFzdCB0aGF0IGFic29ycHRpb24gaXMgbW9yZSBvZiBhbiBpbmRpdmlkdWFsIGRpZmZlcmVuY2UgdGhhbiBpcyBwb3Jvc2l0eS4gRG8gd2Ugc2VlIGFueSBldmlkZW5jZSBvZiB0aGlzIGluIHRoaXMgZGF0YXNldD8KCiMjIyBEbyBpbmRpdmlkdWFscyB2YXJ5IG1vcmUgaW4gYWJzb3JwdGlvbiB0aGFuIHBvcm9zaXR5PwoKVGhlIGZpcnN0IHdheSBJIHRob3VnaHQgb2YgdG8gYXBwcm9hY2ggdGhpcyBxdWVzdGlvbiBpcyB0byBsb29rIGF0IHRoZSBkZWdyZWUgdG8gd2hpY2ggaW5kaXZpZHVhbHMgdmFyeSBpbiBlYWNoIG9mIHRoZXNlIHRocmVlIHNjYWxlcyAoQWJzb3JwdGlvbiwgUG9yb3NpdHkgKER1bGluKSwgYW5kIE1hcnRoYSBTdG9yeSkuIFdlIHdvdWxkIHByZWRpY3QgdGhhdCBhYnNvcnB0aW9uIHdvdWxkIHZhcnkgbW9yZSBhY3Jvc3MgaW5kaXZpZHVhbHMgdGhhbiBlaXRoZXIgb2YgdGhlIHBvcm9zaXR5IGluZGljZXMgKGFmdGVyIHJlc2NsYWluZyBhbGwgdGhyZWVlIHNjYWxlcyB0byBoYXZlIHRoZSBzYW1lIHJhbmdlLCB3aXRoaW4gZWFjaCBzaXRlKS4KCmBgYHtyfQpkX3Zhcl9ieXNpdGUgPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfcG9yX3RvdGFsLCBwN19tbV90b3RhbCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoY29udGFpbnMoInRvdGFsIikpLCAKICAgICAgICAgICAgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGMocDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgbXV0YXRlKHNjb3JlID0gc2NhbGUoc2NvcmUsIHNjYWxlID0gRikpICU+JSAjIGNlbnRlciBhdCAwCiAgdW5ncm91cCgpCmBgYAoKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFic29ycHRpb24gdnMuIFBvcm9zaXR5IChEdWxpbikiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlVTIikpCgpwcmludCgiR2hhbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCgpwcmludCgiVmFudWF0dSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWJzb3JwdGlvbiB2cy4gTWFydGhhIFN0b3J5IikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAicG9yIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiRHVsaW4gdnMuIE1hcnRoYSBTdG9yeSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIlVTIikpCgpwcmludCgiR2hhbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCgpwcmludCgiVGhhaWxhbmQiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gImFicyIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCgpwcmludCgiVmFudWF0dSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQpgYGAKCmBgYHtyfQpkX3Zhcl9ieXNpdGUgJT4lCiAgZ3JvdXBfYnkoc2NhbGUsIHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZSh2YXJpYW5jZSA9IHJvdW5kKHZhcihzY29yZSwgbmEucm0gPSBUKSwgMykpICU+JQogIGFycmFuZ2UocDdfY3RyeSwgc2NhbGUpICU+JQogIHNwcmVhZChzY2FsZSwgdmFyaWFuY2UpCmBgYAoKQWNjb3JkaW5nIHRvIEJhcnRsZXR0IHRlc3RzIG9mIGhvbW9nZW5laXR5IG9mIHZhcmlhbmNlcywgdGhlIG9ubHkgc2l0ZSB3aGVyZSB3ZSBzZWUgdGhlIHBhdHRlcm4gdGhhdCB3ZSdkIGV4cGVjdCBpcyBWYW51YXR1OiBJbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IG1vcmUgaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBQb3Jvc2l0eSAoRHVsaW4pIHNjb3JlcyBvciBNYXJ0aGEgU3Rvcnkgc2NvcmVzLiBJbiBDaGluYSwgaW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBtb3JlIGluIHRoZWlyIEFic29ycHRpb24gc2NvcmVzIHRoYW4gaW4gdGhlaXIgTWFydGhhIFN0b3J5IHNjb3JlcywgYnV0IHZhcmlhbmNlIHdhcyBlcXVhbCBhY3Jvc3MgdGhlIEFic29ycHRpb24gYW5kIFBvcm9zaXR5IHNjb3Jlcy4gSW4gR2hhbmEsIHdlIGFjdHVhbGx5IHNhdyB0aGUgcmV2ZXJzZSBwYXR0ZXJuIHRvIHdoYXQgd2UnZCBleHBlY3Q6IEluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgX2xlc3NfIGluIHRoZWlyIEFic29ycHRpb24gc2NvcmVzIHRoYW4gaW4gdGhlaXIgTWFydGhhIFN0b3J5IHNjb3JlcyAoYW5kIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIEFic29ycHRpb24gYW5kIFBvcm9zaXR5IChEdWxpbikgYWxzbyB3ZW50IGluIHRoZSBzYW1lIGRpcmVjdGx5LCBhbHRob3VnaCBpdCB3YXMgbm90IHNpZ25pZmljYW50KS4KCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC4zLCBpbmNsdWRlID0gVH0KZF92YXJfYnlzaXRlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIGNvbG9yID0gc2NhbGUsIGZpbGwgPSBzY2FsZSkpICsKICBmYWNldF93cmFwKH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBuY29sID0gNSkgKwogIGdlb21fZGVuc2l0eShwb3NpdGlvbiA9ICJpZGVudGl0eSIsIGFscGhhID0gMC4yKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJEaXN0cmlidXRpb25zIiwKICAgICAgIHggPSAiU2NvcmUgKGFkanVzdGVkIHRvIHNoYXJlIGNvbW1vbiByYW5nZSBhbmQgYmUgY2VudGVyZWQgYXQgMCwgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIiwKICAgICAgIGNvbG9yID0gIlNjYWxlIiwgZmlsbCA9ICJTY2FsZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBUfQpkX3Zhcl9ieXNpdGUgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIHN1bW1hcmlzZSh2YXJpYW5jZSA9IHZhcihzY29yZSwgbmEucm0gPSBUKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY2FsZSwgeSA9IHZhcmlhbmNlLCBjb2xvciA9IHNjYWxlKSkgKwogIGZhY2V0X2dyaWQofiBwN19jdHJ5KSArCiAgZ2VvbV9wb2ludChzaG93LmxlZ2VuZCA9IEYsIHNpemUgPSAzKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgbGFicyh0aXRsZSA9ICJWYXJpYW5jZSBieSBzY2FsZSBhbmQgc2l0ZSIsCiAgICAgICB4ID0gIlNjYWxlIiwgeSA9ICJWYXJpYW5jZSAoYWZ0ZXIgYWRqdXN0aW5nIHNjb3Jlc1xudG8gc2hhcmUgY29tbW9uIHJhbmdlIGFuZFxuYmUgY2VudGVyZWQgYXQgMCwgd2l0aGluIGVhY2ggc2l0ZSIpCmBgYAoKKipNeSB0YWtlLWF3YXkgaGVyZSBpcyB0aGF0IHRoZXJlIGlzIF9ub18gc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgYW5hbHlzZXMgb2YgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2UgdGhhdCBpbmRpdmlkdWFscyAod2l0aGluIGEgc2l0ZSkgdmFyaWVkIG1vcmUgaW4gYWJzb3JwdGlvbiB0aGFuIGluIHBvcm9zaXR5LioqCgojIyMgRG8gc2l0ZSBkaWZmZXJlbmNlcyBhY2NvdW50IGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24/CgpUaGUgc2Vjb25kIHdheSBJIHRob3VnaHQgb2YgdG8gYXBwcm9hY2ggdGhpcyBxdWVzdGlvbiBpcyB0byBsb29rIGF0IHRoZSBhbW91bnQgb2YgdmFyaWFuY2UgZXhwbGFpbmVkIGJ5IHNpdGUgZGlmZmVyZW5jZXMgZm9yIGluIGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NhbGVzIChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KS4gV2Ugd291bGQgcHJlZGljdCB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgd291bGQgZXhwbGFpbiBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24gKG5vIHJlc2NhbGluZyBuZWNlc3NhcnkgaGVyZSkuCgpgYGB7cn0KcjdfYWJzIDwtIGxtKHA3X2Fic190b3RhbCB+IHA3X2N0cnksIAogICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCksCiAgICAgICAgICAgICBjb250cmFzdHMgPSBsaXN0KHA3X2N0cnkgPSAiY29udHIuc3VtIikpCgpyN19wb3IgPC0gbG0ocDdfcG9yX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSwKICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKCnI3X21tIDwtIGxtKHA3X21tX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCksCiAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKYGBgCgpOdW1lcmljYWxseSBzcGVha2luZywgdGhpcyBhcHBlYXJzIHRvIGJlIHRydWU6IEluIGEgc2V0IG9mIGxpbmVhciBtb2RlbHMsIHNpdGUgZGlmZmVyZW5jZXMgZXhwbGFpbiBvbmx5IGByIHN1bW1hcnkocjdfYWJzKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIEFic29ycHRpb24gc2NvcmVzLCB2cy4gYHIgc3VtbWFyeShyN19wb3IpJHIuc3F1YXJlZCAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgdmFyaWFuY2UgaW4gUG9yb3NpdHkgKER1bGluKSBzY29yZXMgYW5kIGByIHN1bW1hcnkocjdfbW0pJHIuc3F1YXJlZCAlPiUgcm91bmQoMikgKiAxMDBgJSBvZiB0aGUgdmFyaWFuY2UgaW4gTWFydGhhIFN0b3J5IHNjb3Jlcy4KCkhlcmUsIEknbGwgdHJ5IHRvIGNvbXBhcmUgdGhlc2Ugc3RhdGlzdGljYWxseSAodXNpbmcgc2NvcmVzIGZvciBlYWNoIHNjYWxlIHRoYXQgaGF2ZSBiZWVuIHN0YW5kYXJkaXplZCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CmRfaDdfY29tcGFyZSA8LSBkX3N0ZCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtc3RhcnRzX3dpdGgoInA3IikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oN19jb21wYXJlJHA3X2N0cnkpIDwtIGNiaW5kKG5vblVTX1VTID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hWVF9USENIID0gYygwLCAxLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIX1ZUID0gYygwLCAxLCAwLCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhfQ0ggPSBjKDAsIDAsIC0xLCAxLCAwKSkKY29udHJhc3RzKGRfaDdfY29tcGFyZSRzY2FsZSkgPC0gY2JpbmQocG1tX2FicyA9IGMoLTIsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIC0xLCAxKSkKCnI3X2NvbXBhcmUgPC0gbG1lcihzY29yZSB+IHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfaDdfY29tcGFyZSkKIyBzdW1tYXJ5KHI3X2NvbXBhcmUpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpzdW1tYXJ5KHI3X2NvbXBhcmUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg4OjExLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudDogSSB0aGluayB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhhdCBJIGhhdmUgYm9sZGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzdWdnZXN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGFjcm9zcyBzaXRlcyAoaGVyZSwgY29kZWQgYXMgZGlmZmVyZW5jZXMgYmV0d2VlbiAoYSkgbm9uLVVTIGFuZCBVUyBzaXRlcywgKGIpIEdoYW5hIGFuZCBWYW51YXR1IHZzLiBUaGFpbGFuZCBhbmQgQ2hpbmEsIChjKSBHaGFuYSB2cy4gVmFudWF0dSwgYW5kIChkKSBUaGFpbGFuZCB2cy4gQ2hpbmEpIHdlcmUgZ2VuZXJhbGx5IGV4YWdnZXJhdGVkIGluIHRoZSB0d28gcG9yb3NpdHkgc2NhbGVzIGNvbXBhcmVkIHRvIHRoZSBBYnNvcnB0aW9uIHNjYWxlLCBhbmQgdGhlc2Ugc2VlbXMgdG8gYmUgdHJ1ZSBmcm9tIHRoZSBmb2xsb3dpbmcgcGxvdDoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9oN19jb21wYXJlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCguIH4gc2NhbGUpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhYmlsaXR5IGFjcm9zcyBzaXRlcyBieSBzY2FsZSIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgX2lzXyBwcmV0dHkgc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgcmVzcmVzc2lvbiBhbmFseXNlcyB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24uKioKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUmVsaWdpb3NpdHkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKRG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBzdGlsbCBob2xkIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHBhcnRpY2lwYW50cycgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eT8KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45fQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgICBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RlbV9ob3cuc3BydC5yZWxnLCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIiwgCiAgICAgICB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KZF9zdGRfcmVsaWcgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykgJT4lCiAgbXV0YXRlKHJlbGlnX3N0ZCA9IHNjYWxlKHA3X2RlbV9ob3cuc3BydC5yZWxnLCBzY2FsZSA9IFQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQpCgpkX2g4IDwtIGRfc3RkX3JlbGlnICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX2g4JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDgkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX2g4KQojIHN1bW1hcnkocjhfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpyOF9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHJlbGlnX3N0ZCAqIHNjYWxlICogcDdfY3RyeSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0Kc3VtbWFyeShyOF9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDI6NCwgYm9sZCA9IFQpCmBgYAoKRm9sbG93aW5nIG90aGVyIGFuYWx5c2lzLCBJIGV4YW1pbmVkIHRoaXMgc2VwYXJhdGVseSB1c2luZyBQb3Jvc2l0eSAoRHVsaW4pIGFuZCBNYXJ0aGEgU3RvcnkgYXMgaW5kaWNlcyBvZiBwb3Jvc2l0eS4gSW4gYm90aCBjYXNlcywgcmVsaWdpb3NpdHkgd2FzIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIChhcyB3ZSdkIGV4cGVjdCkuIEJ1dCwgaW1wb3J0YW50bHksIHRoZSBtYWluIGVmZmVjdHMgb2YgcG9yb3NpdHkgcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIGFuYWx5c2VzLCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiBUaGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiByZW1haW5lZCBzaWduaWZpY2FudGx5IHBvc2l0aXZlIHdoZW4gcG9yb3NpdHkgd2FzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSAoc2Vjb25kIHRhYmxlKSwgYnV0IG5vdCB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoaXMgZWZmZWN0IHRvIGJlICJtYXJnaW5hbGx5IHNpZ25pZmljYW50IikuCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgb2JzZXJ2ZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LCBvbiB0aGUgb25lIGhhbmQsIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgb24gdGhlIG90aGVyLioqCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSkKCmRfaDhfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOF9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9oOF9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpCgpyOF9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKQoKcjhfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl90aCkKCnI4X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpCgpyOF9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyOF9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdXMpCgpyOF9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpCgpyOF9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpCgpyOF9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fY2gpCgpyOF9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnJiaW5kKHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkkgc2VlIHR3byBnZW5lcmFsIHBhdHRlcm5zIGhlcmU6CgoxLiBJbiB0aGUgVVMsIFRoYWksIGFuZCBDaGluZXNlIHNhbXBsZXMsIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgcmVsaWdpb3NpdHkgYWxsIHJlbWFpbiBzaWduaWZpY2FudCBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHdoZW4gY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIgaW4gb25lIG9mIHRoZSB0d28gYW5hbHlzZXMgcmVwb3J0ZWQgYWJvdmUuIEluIHRoZSBvdGhlciBhbmFseXNpcywgdGhlcmUgaXMgc29tZSBldmlkZW5jZSBmb3IgInN3YW1waW5nIG91dCI6IEluIHRoZSBVUyBhbmQgQ2hpbmVzZSBzYW1wbGVzLCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzOyBhbmQgaW4gVGhhaWxhbmQsIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRob3VnaCwgKipJJ2Qgc2F5IHRoaXMgaXMgbW9kZXJhdGUgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBkb2VzIF9ub3RfIGZ1bGx5ICJleHBsYWluIGF3YXkiIHRoZSBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIHRoZXNlIHRocmVlIHNpdGVzICh0aGUgVVMsIFRoYWlsYW5kLCBhbmQgQ2hpbmEpLioqCjIuIEluIEdoYW5hIGFuZCBWYW51YXR1LCBvbmx5IHJlbGlnaW9zaXR5IHJlbWFpbnMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gdGhlc2UgYW5hbHlzZXMuICoqVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBldmlkZW5jZSB0aGF0IHJlbGlnaW9zaXR5IF9kb2VzXyAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0d28gKGRldm91dGx5IENocmlzdGlhbikgc2l0ZXMgKEdoYW5hIGFuZCBWYW51YXR1KS4qKgoKVG8gaGVscCB3aXRoIG91ciBpbnRlcnByZXRhdGlvbiwgaGVyZSBhcmUgdGhlIGNvcnJlbGF0aW9ucyB3aXRoIHJlbGlnaW9zaXR5LCB0aGlzIHRpbWUgbG9va2luZyBhdCBzY29yZXMgc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGU6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnX2NvciA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkLCBhYnMsIHBvciwgbW0sIGRzZSwgc2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShhYnMgPSBjb3IocmVsaWdfc3RkLCBhYnMsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgcG9yID0gY29yKHJlbGlnX3N0ZCwgcG9yLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIG1tID0gY29yKHJlbGlnX3N0ZCwgbW0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgZHNlID0gY29yKHJlbGlnX3N0ZCwgZHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHNlID0gY29yKHJlbGlnX3N0ZCwgc2UsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBjb3JfcmVsaWcsIC1wN19jdHJ5KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlX3JlbGlnX2NvcikgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlbGlnX3N0ZCwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlLCBjb3JfcmVsaWcpICU+JSAKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbl94ID0gbWluKHJlbGlnX3N0ZCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95ID0gbWF4KHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeCA9IG1pbihtaW5feCkpICU+JQogICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZSh5ID0gbWF4KG1heF95KSkgJT4lCiAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiciA9ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChyb3VuZChjb3JfcmVsaWcsIDIpLCBuc21hbGwgPSAyKSksCiAgICAgICAgICAgICAgICAgeCA9IHgsIHkgPSB5KSwKICAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBhbHBoYSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiU2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXaGljaCBleHBlcmllbmNlcyBhcmUgcHJlZGljdGVkIGJ5IGFic29ycHRpb24gdnMuIHBvcm9zaXR5PwoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9leHAgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKICBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpIAogICMgIyByZXNjYWxlIGV2ZXJ5dGhpbmcgdG8gcnVuIGZyb20gMC0xCiAgIyBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKQpgYGAKCmBgYHtyfQpkX2V4cF9jb3IgPC0gZF9leHAgJT4lIAogIHNlbGVjdChwN19zdWJqLCBwN19hYnNfdG90YWwsIAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfYWJzX3RvdGFsKSkgJT4lCiAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShhYnNfY29yID0gY29yKHA3X2Fic190b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSAlPiUKICBmdWxsX2pvaW4oZF9leHAgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBwN19wb3JfdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfcG9yX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3JfY29yID0gY29yKHA3X3Bvcl90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0ZW4gbW9zdCBzdHJvbmdseSBjb3JyZWxhdGVkIGl0ZW1zIGZvciBlYWNoIG9mIG91ciB0aHJlZSBwcmVkaWN0b3JzIG9mIGludGVyZXN0IChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KToKCmBgYHtyLCBpbmNsdWRlID0gVH0KYmluZF9yb3dzKGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigxMCwgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpKSAlPiUKICBhcnJhbmdlKHdoaWNoX2NvciwgZGVzYyhhYnMoY29yKSkpICU+JQogIHNlbGVjdChjb3IsIHF1ZXN0aW9uX3RleHQsIHNjYWxlKSAlPiUKICByZW5hbWUoQ29ycmVsYXRpb24gPSBjb3IsIGBRdWVzdGlvbiB0ZXh0YCA9IHF1ZXN0aW9uX3RleHQsIFNjYWxlID0gc2NhbGUpICU+JQogIGthYmxlKGRpZ2l0cyA9IDMpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJBYnNvcnB0aW9uIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlBvcm9zaXR5IChEdWxpbikiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIk1hcnRoYSBTdG9yeSIsIDIxLCAzMCkKYGBgCgpBbmQgaGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgY29ycmVsYXRpb25zIG9mIHRoZXNlIHRocmVlIHByZWRpY3RvcnMgd2l0aCBhbGwgImV4cGVyaWVuY2UiIGl0ZW1zIGluIHRoaXMgcGFja2V0IChzcGlyaXR1YWwgYW5kIHNlY3VsYXIpOgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfZXhwX2NvciAlPiUKICAgICAgICAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA4MCkpLAogICAgICAgYWVzKHggPSBjb3IsIHkgPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIGRlc2Mob3JkZXIpKSwgCiAgICAgICAgICAgY29sb3IgPSB3aGljaF9jb3IpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQZWFyc29uIGNvcnJlbGF0aW9uICh0aGVvcmV0aWNhbCByYW5nZTogLTEgdG8gMSkiLAogICAgICAgeSA9ICJRdWVzdGlvbiAoYnkgc2NhbGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciIpCmBgYAoKIyMjIENvbnNpZGVyaW5nIGVhY2ggc2l0ZSBpbmRpdmlkdWFsbHkKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5OiBnb29kIHZzLiBiYWQgZW1vdGlvbnMKCmBgYHtyfQpkX21tIDwtIGQwICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX21tXyIpKSAlPiUKICBzZWxlY3QoLWMoZW5kc193aXRoKCJfY2F0IiksIGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoZW1vID0gY2FzZV93aGVuKGdyZXBsKCJfYW5nXyIsIHF1ZXN0aW9uKSB+ICJhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICBncmVwbCgiX2Nhcl8iLCBxdWVzdGlvbikgfiAiY2FyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfZW52XyIsIHF1ZXN0aW9uKSB+ICJlbnZ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgdmFsID0gY2FzZV93aGVuKGVtbyAlaW4lIGMoImFuZ2VyIiwgImVudnkiKSB+ICJuZWdhdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlbW8gPT0gImNhcmluZyIgfiAicG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICBlbW8gPSBmYWN0b3IoZW1vLCBsZXZlbHMgPSBjKCJhbmdlciIsICJlbnZ5IiwgImNhcmluZyIpKSwKICAgICAgICAgdmFsID0gZmFjdG9yKHZhbCwgbGV2ZWxzID0gYygibmVnYXRpdmUiLCAicG9zaXRpdmUiKSkpCgpjb250cmFzdHMoZF9tbSRwN19jdHJ5KSA8LSBjb250cmFzdHNfY3RyeV9lZmYKY29udHJhc3RzKGRfbW0kZW1vKSA8LSBjYmluZCgiX25lZ19wb3MiID0gYygxLCAxLCAtMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9lbnZfYW5nIiA9IGMoLTEsIDEsIDApKQpjb250cmFzdHMoZF9tbSR2YWwpIDwtIGNiaW5kKCJfbmVnX3BvcyIgPSBjKDAsIDEpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC43LCBpbmNsdWRlID0gVH0KbW1fZW1vX3Bsb3RfYSA8LSBkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgeSA9IG1lYW5fc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbykgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzLCAxKSkgKwogIGxhYnModGl0bGUgPSAiTWVhbiByZXNwb25zZXMgdG8gTWFydGhhIFN0b3J5IHF1ZXN0aW9ucyBieSBlbW90aW9uIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIkVtb3Rpb24iLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgptbV9lbW9fcGxvdF9iIDwtIGRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8pICU+JQogIHN1bW1hcmlzZShtZWFuX3Njb3JlID0gbWVhbihyZXNwb25zZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc3VtX3Njb3JlID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCBlbW8pICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH4gcDdfY3RyeSkgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gNCwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMywgMSkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIkVtb3Rpb24iLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgpwbG90X2dyaWQobW1fZW1vX3Bsb3RfYSwgbW1fZW1vX3Bsb3RfYiwgbmNvbCA9IDEpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjJ9CmRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8sIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksCiAgICAgICAgIHF1ZXN0aW9uX3R5cGUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfZmVlbC5odXJ0IiwgInA3X21tX2Nhcl9mZWwubm8ucHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X2ZlZWwuaHVydCIpIH4gCiAgICAgICAgICAgICAiYS4gaHVydC9oZWxwIHdpdGggZmVlbGluZ3MiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3RoZ3MuaHVydCIsICJwN19tbV9jYXJfdGhrLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl90aGdzLmh1cnQiKSB+IAogICAgICAgICAgICAgImIuIGh1cnQvaGVscCB3aXRoIGp1c3QgdGhvdWdodHMiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NwcnQuaHVydCIsICJwN19tbV9jYXJfc3BydC5oZWxwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9zcHJ0Lmh1cnQiKSB+IAogICAgICAgICAgICAgImMuIGh1cnQvaGVscCB2aWEgc3Bpcml0IiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19waHlzaWNhbCIsICJwN19tbV9jYXJfcGh5c2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3BoeXNpY2FsIikgfiAKICAgICAgICAgICAgICJkLiBwaHlzaWNhbGx5IHNpY2svd2VsbCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfc2lja25lc3MiLCAicDdfbW1fY2FyX2N1cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc2lja25lc3MiKSB+IAogICAgICAgICAgICAgImUuIGNhdXNlIikpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgCiAgICAgICAgICAgICB5ID0gbWVhbl9zY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQocDdfY3RyeSB+IHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSwgc2NhbGVzID0gImZyZWVfeCIpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdHlwZSwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDEpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgaXRlbSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJRdWVzdGlvbiB0eXBlIiwKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBPdmVyYWxsIHNjb3JlcwoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKZF9wYXNzX21iIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYSA8LSBkICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfcGFzc19tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkV4bHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpzY29yZXNfcGxvdF9wYXNzX2IgPC0gZF9wYXNzX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMi4yLCBpbmNsdWRlID0gVH0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpwbG90X2dyaWQoc2NvcmVzX3Bsb3RfcGFzc19hLCBzY29yZXNfcGxvdF9wYXNzX2IsIG5jb2wgPSAxKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCmRfYWxsX21iIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJzY29yZSIpICU+JSAKICB1bmdyb3VwKCkKYGBgCgpgYGB7cn0KIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwpzY29yZXNfcGxvdF9hbGxfYSA8LSBkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBzY29yZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofnNjYWxlLCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjIsIHdpZHRoID0gMC40LCBhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSBkX2FsbF9tYiwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMikgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2NvcmVzIGZvciBhbGwgc2NhbGVzIiwKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9iIDwtIGRfYWxsX21iICU+JSAKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2N0cnksIHkgPSBtZWFuLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgICAgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMgKHpvb21lZCBpbikiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9hbGxfYSwgc2NvcmVzX3Bsb3RfYWxsX2IsIG5jb2wgPSAxKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgSGlzdG9ncmFtcyBmb3IgZWFjaCBzY2FsZQoKIyMgQWJzb3JwdGlvbgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfYWJzX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19hYnNfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkFic29ycHRpb24iLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gYWJzb3JwdGlvbiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZHNlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19kc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDM1LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcwLCAzNSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19kc2VfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gRFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNzApIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBTcGlyaXR1YWwgZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC05NikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGZpbHRlcihwN19zZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3NlX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19zZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDQ4LCB5ID0gMC4wNSwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDk2LCAyNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU3Bpcml0dWFsIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBTRSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgV2F5cyBvZiBiZWluZwoKIyMjIEFsbCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3dvYl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfd29iX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zNiwgMzYsIDE4KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zNiB0byAzNikiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgojIyMgRXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIl93b2JfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSwgY29udGFpbnMoInJldmVyc2UiKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkX2N0bF9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gIndvYiIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjgsIDI4LCAxNCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMjggdG8gMjgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgVW5jb21tb24gZXZlbnRzCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfdW5ldl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfdW5ldl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfdW5ldl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA5LCB5ID0gMC4yMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDE4LCA5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJVbmNvbW1vbiBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTE4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3VuZXZfY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBVTkVWIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBFeHRyYXNlbnNvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2V4c2VuX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZXhzZW5fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2V4c2VuX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4zMCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDcsIDEpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkV4dHJhc2Vuc29yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBFWFNFTiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBIYXJkIHRoaW5raW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfaHRoa190b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfaHRoa190b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfaHRoa190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM4LCAzOCwgMTkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM4IHRvIDM4KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX2h0aGtfIiksCiAgICAgICAgIC1jKGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogICAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgICAgcDdfaHRoa19ocmQuaGF2LnRvLCBwN19odGhrX3NtYWwuZGFpbHksIHA3X2h0aGtfbGlsLnRob3VnaHQsCiAgICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCAKICAgICAgICAgICAgICBwN19odGhrX2pvYi5kb25lKSkgJT4lIAogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSBhcy5udW1lcmljKHJlc3BvbnNlKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiaHRoayIsICFpcy5uYShzY29yZV9ub3JldikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlX25vcmV2LCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yMCwgMjAsIDEwKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yMCB0byAyMCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3Bvcl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfcG9yX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAxNywgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAzNCwgMTcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlBvcm9zaXR5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFBPUiBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTM0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgTWFydGhhIHN0b3J5CgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X21tX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X21tX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfbW1fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMjcsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNTQsIDI3KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJNYXJ0aGEgc3RvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gTU0gc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC01NCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgRGVtb2dyYXBoaWNzCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJBbGwgcGFydGljaXBhbnRzIikKZDAgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IFR9CnByaW50KCJQYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyIpCmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX3NleCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgY291bnQocDdfZGVtX3NleCkgJT4lCiAgbXV0YXRlKHByb3AgPSByb3VuZChuL3N1bShuKSwgMikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLW4pICU+JQogIHNwcmVhZChwN19kZW1fc2V4LCBwcm9wKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKSW1wb3J0YW50IHRvIG5vdGUgdGhhdCBhIF92ZXJ5XyBzdWJzdGFudGlhbCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVGhhaWxhbmQgd2VyZSBmZW1hbGUsIGFuZCBhIHNsaWdodCBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudHMgaW4gVmFudWF0dSB3ZXJlIGZlbWFsZS4KCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fYWdlKSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2QocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWluID0gbWluKHA3X2RlbV9hZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIG1heCA9IG1heChwN19kZW1fYWdlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGVfYXQodmFycyhtZWRpYW4sIG1lYW4sIHNkLCBtaW4sIG1heCksIGZ1bnMocm91bmQoLiwgMikpKQpgYGAK